diff --git a/integration_test/views_test.dart b/integration_test/views_test.dart index d25b4d0bd..87c1e145c 100644 --- a/integration_test/views_test.dart +++ b/integration_test/views_test.dart @@ -26,7 +26,7 @@ import 'package:privacyidea_authenticator/utils/riverpod/riverpod_providers/gene import 'package:privacyidea_authenticator/utils/rsa_utils.dart'; import 'package:privacyidea_authenticator/model/version.dart'; import 'package:privacyidea_authenticator/utils/utils.dart'; -import 'package:privacyidea_authenticator/views/settings_view/settings_view_widgets/settings_groups.dart'; +import 'package:privacyidea_authenticator/views/settings_view/settings_view_widgets/settings_group.dart'; import '../test/tests_app_wrapper.dart'; import '../test/tests_app_wrapper.mocks.dart'; @@ -163,7 +163,7 @@ Future _settingsViewTest(WidgetTester tester) async { await tester.tap(find.byIcon(Icons.settings)); await tester.pumpAndSettle(); expect(find.text(AppLocalizationsEn().settings), findsOneWidget); - expect(find.text(AppLocalizationsEn().theme), findsOneWidget); + expect(find.text(AppLocalizationsEn().themeMode), findsOneWidget); expect(find.text(AppLocalizationsEn().language), findsOneWidget); expect(find.text(AppLocalizationsEn().errorLogTitle), findsOneWidget); expect(find.byType(SettingsGroup), findsNWidgets(6)); diff --git a/lib/l10n/app_cs.arb b/lib/l10n/app_cs.arb index 01f3bd56e..b374e65d0 100644 --- a/lib/l10n/app_cs.arb +++ b/lib/l10n/app_cs.arb @@ -1,381 +1,362 @@ { - "@@last_modified": "2023-08-07", - "patchNotesNewFeatures": "Nové funkce", - "patchNotesImprovements": "Improvements", - "patchNotesBugFixes": "Opravy chyb", - "patchNotesV4_4_0NewFeatures1": "Nyní je možné exportovat tokeny, u kterých lze zajistit, že se nejedná o tokeny privacyIDEA. V současné době nelze vyloučit, že tokeny přidané prostřednictvím čtečky QR kódů pocházejí z aplikace privacyIDEA. Rozlišování bude v budoucích verzích vylepšeno.", - "patchNotesV4_4_0NewFeatures2": "Přidána podpora pro \"require presence\" aplikace privacyIDEA.", - "patchNotesV4_4_0Improvement1": "Byly přidány další dovozní zdroje.", - "patchNotesV4_4_0Improvement2": "Bylo vylepšeno rozpoznávání QR kódů z obrazových souborů.", - "patchNotesV4_3_1BugFix1": "Opraven problém, kdy nebyla zobrazena hodnota otp po ověření na některých zařízeních.", - "patchNotesV4_3_1Improvement1": "Skener QR kódů byl vylepšen.", - "patchNotesV4_3_0NewFeatures1": "Přidána podpora pro import tokenů z Google, Aegis a 2FAS Authenticator. Další zdroje importu budou přidány v budoucnu.", - "patchNotesV4_3_0NewFeatures2": "Do nastavení byla přidána možnost zpětné vazby.", - "patchNotesV4_3_0NewFeatures3": "Tokeny Push lze nyní skrýt ze seznamu tokenů.", - "patchNotesV4_3_0NewFeatures4": "Byly přidány úvodní informace, které novým uživatelům usnadní začátky.", - "patchNotesV4_3_0NewFeatures5": "Žetony nyní můžete vyhledávat klepnutím na lupu v pravém horním rohu.", - "patchNotesV4_3_0NewFeatures6": "Přidán token HomeWidget pro systém Android 12 a novější.", - "guide": "Průvodce", - "@guide": { - "description": "Button to open the guide screen." - }, - "retry": "Zkusit znovu", - "@retry": { - "description": "Label for e.g. a button. Something is tried to be done again." - }, - "accept": "Přijmout", + "@@last_modified": "2024-09-20", + "@@locale": "cs", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." }, - "decline": "Odmítnout", - "@decline": { - "description": "Label for e.g. a button. Something gets declined by the user." - }, - "name": "Název", - "@name": { - "description": "Describes the field where the tokens name should be entered." - }, - "secretKey": "Tajný klíč", - "@secretKey": { - "description": "Describes the field where the tokens secret should be entered." - }, - "encoding": "Kódování", - "@encoding": { - "description": "Title of the dropdown button where the encoding is selected." + "@addToken": { + "description": "The button to open the screen to add tokens by hand." }, - "algorithm": "Algoritmus", "@algorithm": { "description": "Title of the dropdown button where the encoding is selected." }, - "digits": "Počet číslic", - "@digits": { - "description": "Title of the dropdown button where the number of digits for the opt value is selected." + "@algorithmUnsupported": { + "placeholders": { + "algorithm": { + "example": "MD5" + } + } }, - "type": "Typ", - "@type": { - "description": "Title of the dropdown button where the type of the token is selected." + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." }, - "period": "Časový interval", - "@period": { - "description": "Title of the dropdown button where the period of the totp token is selected." + "@authNotSupportedBody": { + "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." }, - "rename": "Přejmenovat", - "@rename": { - "description": "Label that describes renaming the token." + "@authNotSupportedTitle": { + "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." }, - "cancel": "Zrušit", - "@cancel": { - "description": "Button to cancel an action." + "@authToAcceptPushRequest": { + "description": "Message to accepting a push request for authentication." }, - "delete": "Smazat", - "@delete": { - "description": "Label that describes deleting the token." + "@authToDeclinePushRequest": { + "description": "Message for declining a push request for authentication." }, - "dismiss": "Zavřít", - "@dismiss": { - "description": "Text of a button that closes a dialog." + "@authenticateToShowOtp": { + "description": "Reason to authenticate when trying to view a one time password." }, - "addToken": "Přidat token", - "@addToken": { - "description": "The button to open the screen to add tokens by hand." + "@authenticateToUnLockToken": { + "description": "Reason to authenticate when trying to lock or unlock a token." }, - "scanQrCode": "Naskenovat QR kód", - "@scanQrCode": { - "description": "The button to scan otpauth qr-codes." + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, - "enterDetailsForToken": "Vložte podrobnosti tokenu", - "@enterDetailsForToken": { - "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." + "@biometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterANameForThisToken": "Vložte název pro tento token.", - "@pleaseEnterANameForThisToken": { - "description": "Hint telling the user to enter a name for a token." + "@biometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterASecretForThisToken": "Vložte tajný klíč pro tento token.", - "@pleaseEnterASecretForThisToken": { - "description": "Hint telling the user to enter a secret for a token." + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, - "theSecretDoesNotFitTheCurrentEncoding": "Tajný klíč neodpovídá zvolenému kódování.", - "@theSecretDoesNotFitTheCurrentEncoding": { - "description": "Hint telling the user that the secret does not fit the selected encoding." + "@cancel": { + "description": "Button to cancel an action." }, - "renameToken": "Přejmenovat token", - "@renameToken": { - "description": "Title of the dialog where a new name for a token can be entered." + "@checkServerCertificate": { + "description": "Error message when the server certificate should be checked." + }, + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "@clearErrorLog": { + "description": "Button to clear the error log." }, - "confirmDeletion": "Potvrdit smazání", "@confirmDeletion": { "description": "Title of the dialog where a token can be deleted." }, - "confirmDeletionOf": "Opravdu chcete smazat token {name}?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234" } - } - }, - "confirmTokenDeletionHint": "Pokud tento token odstraníte, nebude již možné se přihlásit.\nProsím, ujistěte se, že se můžete přihlásit k přidruženému účtu bez tohoto tokenu.", - "@confirmTokenDeletionHint": { - "description": "Gives the user a hint about the consequences of deleting a token." + }, + "type": "text" }, - "confirmFolderDeletionHint": "Odstranění složky nemá žádný vliv na tokeny v ní.\nTokeny jsou přesunuty do hlavního seznamu.", "@confirmFolderDeletionHint": { "description": "Gives the user a hint about the consequences of deleting a folder." }, - "generatingPhonePart": "Generování klientské části", - "@generatingPhonePart": { - "description": "Title of a dialog telling the user that the phone part gets generated right now." + "@confirmTokenDeletionHint": { + "description": "Gives the user a hint about the consequences of deleting a token." }, - "phonePart": "Klientská část:", - "@phonePart": { - "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + "@connectionFailed": { + "description": "Tells the user that the connection failed." }, - "otpValueCopiedMessage": "Heslo \"{otpValue}\" bylo zkopírováno do schránky.", - "@otpValueCopiedMessage": { - "description": "Tells the user that the otp value was copied to the clipboard.", - "type": "text", - "placeholders": { - "otpValue": { - "example": "055374" - } - } + "@container": { + "description": "Title for the container view." }, - "settings": "Nastavení", - "@settings": { - "description": "Button to open the settings page." + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." }, - "pushToken": "Push notifikace", - "@pushToken": { - "description": "Title for the settings block concerning the push tokens." + "@counter": { + "description": "Title of the counter field." }, - "theme": "Vzhled", - "@theme": { - "description": "Title of the setting group where the theme can be selected." + "@createdAt": { + "description": "Label for the creation date of the token." }, - "lightTheme": "Světlý", - "@lightTheme": { - "description": "The light theme." + "@creator": { + "description": "Label for the creator of the token." }, - "darkTheme": "Tmavý", "@darkTheme": { "description": "The dark theme." }, - "systemTheme": "Použít nastavení systému", - "@systemTheme": { - "description": "The systems theme." + "@decline": { + "description": "Label for e.g. a button. Something gets declined by the user." }, - "someTokensDoNotSupportPolling": "Některé tokeny jsou zastaralé a nepodporují polling", - "@someTokensDoNotSupportPolling": { - "description": "Tells the user, that the following tokens do not support polling.", - "type": "text", - "placeholders": {} + "@delete": { + "description": "Label that describes deleting the token." }, - "enablePolling": "Povolit polling", - "@enablePolling": { - "description": "Name of the setting switch that enables polling." + "@deviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." }, - "requestPushChallengesPeriodically": "Periodicky získávat výzvy ze serveru. Povolte pokud nefunguje příjem push notifikací.", - "@requestPushChallengesPeriodically": { - "description": "The description of the polling feature." + "@deviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." }, - "synchronizePushTokens": "Synchronizace push tokenů", - "@synchronizePushTokens": { - "description": "Title of synchronizing push tokens in settings." + "@digits": { + "description": "Title of the dropdown button where the number of digits for the opt value is selected." }, - "synchronizesTokensWithServer": "Synchronizovat tokeny se serverem privacyIDEA.", - "@synchronizesTokensWithServer": { - "description": "Description of synchronizing push tokens in settings." + "@dismiss": { + "description": "Text of a button that closes a dialog." }, - "sync": "Synchronizovat", - "@sync": { - "description": "Text of button that is used to synchronize push tokens." + "@enablePolling": { + "description": "Name of the setting switch that enables polling." }, - "synchronizingTokens": "Tokeny se synchronizují.", - "@synchronizingTokens": { - "description": "Title of the push synchronization dialog." + "@encoding": { + "description": "Title of the dropdown button where the encoding is selected." }, - "allTokensSynchronized": "Všechny tokeny jsou synchronizované.", - "@allTokensSynchronized": { - "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + "@enterDetailsForToken": { + "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." }, - "syncFbTokenFailed": "Synchronizace následujících tokenů selhala, zkuste to znovu:", - "@syncFbTokenFailed": { - "description": "Headline for the list of tokens where the synchronization failed." + "@errorLogCleared": { + "description": "Message that tells the user that the error log was cleared." }, - "tokensDoNotSupportSynchronization": "Následující tokeny nepodporují synchronizaci a musí být znovu zaregistrovány:", - "@tokensDoNotSupportSynchronization": { - "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + "@errorLogEmpty": { + "description": "Message that tells the user that the error log is empty." + }, + "@errorLogTitle": { + "description": "Title of the error log screen." + }, + "@errorMailBody": { + "description": "Message for email body" }, - "errorRollOutFailed": "Registrace tokenu {name} selhala.", "@errorRollOutFailed": { "description": "Tells the user that the token could not be rolled out, because a network error occurred.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234A" } - } + }, + "type": "text" }, - "statusCode": "Stavový kód: {statusCode}", - "@statusCode": { - "description": "Tells the user the status code of the error.", + "@errorRollOutNoConnectionToServer": { + "description": "Message for the rollout process", "placeholders": { - "statusCode": { - "example": "400" + "name": { + "example": "PUSH1234A" } } }, - "errorSynchronizationNoNetworkConnection": "Synchronizace tokenů selhala, připojení k serveru privacyIDEA se nezdařilo.", - "@errorSynchronizationNoNetworkConnection": { - "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." }, - "errorRollOutUnknownError": "Vyskytla se neznámá chyba. Registrace není možná: {e}", "@errorRollOutUnknownError": { "description": "Tells the user that the roll-out failed because of an unknown error.", - "type": "text", "placeholders": { "e": { "example": "IllegalArgumentException on Line 5 ..." } - } - }, - "startRollout": "Začít zavádění", - "@startRollout": { - "description": "Label that tells the user that the token is being rolled out." - }, - "pollingChallenges": "Čekám na nové požadavky", - "@pollingChallenges": { + }, "type": "text" }, - "unexpectedError": "Nastala neočekávaná chyba.", - "@unexpectedError": { - "description": "Title of page report mode." - }, - "pollingFailed": "Dotaz se nezdařil.", - "@pollingFailed": { - "description": "Tells the user that the polling failed." + "@errorSynchronizationNoNetworkConnection": { + "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, - "pollingFailedFor": "Dotaz na {serial} se nezdařil.", - "@pollingFailedFor": { - "description": "Tells the user that the polling failed.", + "@errorTokenExpired": { "placeholders": { - "serial": { + "name": { "example": "PUSH1234A" } } }, - "noNetworkConnection": "Žádné připojení k síti.", - "@noNetworkConnection": { - "description": "Tells the user that there is no network connection." + "@errorUnlinkingPushToken": { + "description": "Error message when unlinking a push token failed.", + "placeholders": { + "label": { + "example": "PUSH1234A" + } + } }, - "connectionFailed": "Připojení se nezdařilo.", - "@connectionFailed": { - "description": "Tells the user that the connection failed." + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "checkYourNetwork": "Zkontrolujte prosím síťové připojení a zkuste to znovu.", - "@checkYourNetwork": { - "description": "Tells the user to check the network connection." + "@failedToLoad": { + "placeholders": { + "name": { + "example": "token data" + } + } }, - "serverNotReachable": "Na server se nepodařilo dovolat.", - "@serverNotReachable": { - "description": "Tells the user that the server could not be reached." + "@feedbackPrivacyPolicy2": { + "description": "Taping on this should open the privacy policy." }, - "couldNotSignMessage": "Zprávu se nepodařilo podepsat.", - "@couldNotSignMessage": { - "description": "Tells the user that the message could not be signed." + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." }, - "useDeviceLocaleTitle": "Použít jazyk zařízení", - "@useDeviceLocaleTitle": { - "description": "Title of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" }, - "useDeviceLocaleDescription": "Použít jazyk zařízení, pokud je podporován, případně angličtinu.", - "@useDeviceLocaleDescription": { - "description": "Description of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" }, - "language": "Jazyk", - "@language": { - "description": "Title of language setting group." + "@goToSettingsButton": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." }, - "authenticateToShowOtp": "Pro zobrazení jednorázového kódu se přihlaste.", - "@authenticateToShowOtp": { - "description": "Reason to authenticate when trying to view a one time password." + "@goToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." }, - "authenticateToUnLockToken": "Pro změnu uzamčení tokenu se přihlaste.", - "@authenticateToUnLockToken": { - "description": "Reason to authenticate when trying to lock or unlock a token." + "@guide": { + "description": "Button to open the guide screen." }, - "biometricRequiredTitle": "Biometrické ověření není nastaveno", - "@biometricRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + "@handshakeFailed": { + "description": "Error message when the handshake failed." }, - "biometricHint": "Vyžadováno přihlášení", - "@biometricHint": { - "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + "@importedVia": { + "description": "Label for the import method of the token." }, - "biometricNotRecognized": "Ověření se nezdařilo. Zkuste to znovu.", - "@biometricNotRecognized": { - "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + "@internalServerError": { + "placeholders": { + "code": { + "example": "500" + } + } }, - "biometricSuccess": "Přihlášení bylo úspěšné", - "@biometricSuccess": { - "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + "@invalidValue": { + "description": "Error message when the value is not valid for the parameter.", + "placeholders": { + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsRequiredTitle": "Není nastaven zámek zařízení", - "@deviceCredentialsRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + "@invalidValueIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsSetupDescription": "Nastave zámek zařízení v nastavení zařízení", - "@deviceCredentialsSetupDescription": { - "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + "@isExpotableQuestion": { + "description": "Label for the question if the token is exportable." }, - "signInTitle": "Vyžadováno přihlášení", - "@signInTitle": { - "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + "@isPiTokenQuestion": { + "description": "Label for the question if the token is a privacyIDEA token." }, - "goToSettingsButton": "Otevřít nastavení", - "@goToSettingsButton": { - "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + "@language": { + "description": "Title of language setting group." }, - "goToSettingsDescription": "Není nastaveno přihlášení zámkem zařízení ani biometrické ověření. Aktivujte je v nastavení zařízení.", - "@goToSettingsDescription": { - "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." + "@legacySigningErrorMessage": { + "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." }, - "lockOut": "Biometrické ověření je deaktivováno. Pro aktivaci zamkněte a znovu odemkněte obrazovku/zařízení.", - "@lockOut": { - "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + "@legacySigningErrorTitle": { + "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "placeholders": { + "tokenLabel": { + "example": "PUSH1234A" + } + } }, - "authNotSupportedTitle": "Vyžadován zámek zařízení nebo biometrické ověření", - "@authNotSupportedTitle": { - "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." + "@lightTheme": { + "description": "The light theme." }, - "authNotSupportedBody": "Tato akce vyžaduje, aby bylo zařízení chráněno zámkem zařízení nebo biometrickým ověřením.", - "@authNotSupportedBody": { - "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." + "@linkedContainer": { + "description": "Label for the linked container serial number." }, - "lock": "Zamknout", "@lock": { "description": "Description of button that locks a token." }, - "unlock": "Odemknout", - "@unlock": { - "description": "Description of button that unlocks a token." + "@lockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." }, - "noResultTitle": "Nejsou nainstalovány žádné tokeny.", - "@noResultTitle": { - "description": "No tokens installed yet." + "@logMenu": { + "description": "Button to open the log menu." + }, + "@malformedData": { + "description": "Error message when the data is malformed." + }, + "@missingRequiredParameter": { + "description": "Error message when a required parameter is missing.", + "placeholders": { + "parameter": { + "example": "counter" + } + } + }, + "@missingRequiredParameterIn": { + "description": "Error message when a required parameter is missing in a specific map.", + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + } + } + }, + "@mustNotBeEmpty": { + "placeholders": { + "field": { + "example": "Name" + } + } + }, + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "@noFbToken": { + "description": "Tells the user that there is no Firebase token available." + }, + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." }, - "noResultText1": "stiskněte tlačítko ", "@noResultText1": { "description": "first noresult text" }, - "noResultText2": " a začněte s používáním.", "@noResultText2": { "description": "second noresult text" }, - "onBoardingTitle1": "{appName}", + "@noResultTitle": { + "description": "No tokens installed yet." + }, + "@notAnInteger": { + "description": "Error message when the user entered a value that is not an integer." + }, + "@notAnNumber": { + "description": "Error message when the user entered a value that is not a number." + }, + "@ok": { + "description": "Button to confirm an action." + }, "@onBoardingTitle1": { "placeholders": { "appName": { @@ -383,296 +364,558 @@ } } }, - "onBoardingText1": "vícefázové ověření\nusnadněno", - "onBoardingTitle2": "Maximální Bezpečnost", - "onBoardingText2": "Uložte tokeny do svého zařízení\nchráněné biometrickým ověřením", - "onBoardingTitle3": "Navštivte náš profil Github", - "onBoardingText3": "Tuto aplikaci má open source", - "errorLogTitle": "Protokol chyb", - "logMenu": "Nabídka protokolu", - "showErrorLog": "Zobrazit", - "clearErrorLog": "Vymazat", - "send": "Odeslat", - "sendErrorLogDescription": "Vytvoří se připravený e-mail.\nObsahuje informace o aplikaci, chybě a zařízení.\nPřed odesláním můžete e-mail upravit.\nZde se můžete podívat, jak informace používáme:", - "@sendErrorLogDescription": { - "description": "Explanation for the user what he will send." + "@open": { + "description": "Button to open something." }, - "showPrivacyPolicy": "Zobrazit zásady ochrany osobních údajů", - "errorLogEmpty": "Protokol chyb je prázdný.", - "verboseLogging": "Zevrubné protokolování", - "errorLogCleared": "Protokol chyb vymazán.", - "ok": "Ok", - "errorMailBody": "Přiložen je soubor protokolu o chybách.\nTento text můžete nahradit dalšími informacemi o chybě.", - "@errorMailBody": { - "description": "Message for email body" + "@originApp": { + "description": "Label for the origin app." }, - "showDetails": "Zobrazit podrobnosti", - "open": "Otevřít", - "sendErrorDialogBody": "V aplikaci se vyskytla neznámá chyba. Informace uvedené níže mohou být odeslány vývojářům e-mailem pro vyřešení chyby v budoucnu.", - "@sendErrorDialogBody": { - "description": "Description shown to the user about what info the error report contains." + "@originDetails": { + "description": "Title of the origin details menu." }, - "noFbToken": "Není k dispozici žádný token Firebase.", - "firebaseToken": "Token Firebase", - "noPublicKey": "Není k dispozici žádný veřejný klíč.", - "publicKey": "Veřejný klíč", - "editToken": "Upravit token", - "edit": "Upravit", - "save": "Uložit", - "create": "Vytvořit", - "validFor": "Platné pro", - "validUntil": "Platné do", - "deleteLockedToken": "Prosím, autentifikujte se pro smazání uzamčeného tokenu.", - "editLockedToken": "Prosím, autentifikujte se pro úpravu uzamčeného tokenu.", - "expandLockedFolder": "Chcete-li otevřít uzamčenou složku, ověřte se.", - "renameTokenFolder": "Přejmenování složky", - "addANewFolder": "Vytvoření nové složky", - "folderName": "Název složky", - "retryRollout": "Zkusit znovu", - "generatingRSAKeyPair": "Generování párů klíčů RSA", - "@generatingRSAKeyPair": { - "description": "Message for the rollout process" + "@otpValueCopiedMessage": { + "description": "Tells the user that the otp value was copied to the clipboard.", + "placeholders": { + "otpValue": { + "example": "055374" + } + }, + "type": "text" }, - "generatingRSAKeyPairFailed": "Generování páru klíčů RSA se nezdařilo", - "@generatingRSAKeyPairFailed": { + "@parsingResponse": { "description": "Message for the rollout process" }, - "sendingRSAPublicKey": "Odeslání veřejného klíče RSA", - "@sendingRSAPublicKey": { + "@parsingResponseFailed": { "description": "Message for the rollout process" }, - "sendingRSAPublicKeyFailed": "Nepodařilo se odeslat veřejný klíč RSA", - "@sendingRSAPublicKeyFailed": { - "description": "Message for the rollout process" + "@period": { + "description": "Title of the dropdown button where the period of the totp token is selected." }, - "parsingResponse": "Rozbor odpovědi", - "@parsingResponse": { - "description": "Message for the rollout process" + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "parsingResponseFailed": "Parsování odpovědi se nezdařilo", - "@parsingResponseFailed": { - "description": "Message for the rollout process" + "@pleaseEnterANameForThisToken": { + "description": "Hint telling the user to enter a name for a token." }, - "rolloutCompleted": "Zavedení dokončeno", - "@rolloutCompleted": { - "description": "Message for the rollout process" + "@pleaseEnterASecretForThisToken": { + "description": "Hint telling the user to enter a secret for a token." }, - "errorRollOutNoConnectionToServer": "Registrace tokenu {name} selhala. Server není dostupný.", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process", - "placeholders": { - "name": { - "example": "PUSH1234A" - } - } + "@pollingChallenges": { + "type": "text" }, - "authToAcceptPushRequest": "Pro přijetí požadavku na push notifikaci se přihlaste.", - "authToDeclinePushRequest": "Pro odmítnutí požadavku na push notifikaci se přihlaste.", - "pushRequestParseError": "Požadavek na odeslání se nepodařilo zpracovat.", - "imageUrl": "URL obrázku", - "errorRollOutSSLHandshakeFailed": "SSL handshake se nezdařil. Roll-out není možný.", - "errorWhenPullingChallenges": "Při dotazování na výzvy {name} došlo k chybě.", - "@errorWhenPullingChallenges": { + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", "placeholders": { - "name": { + "serial": { "example": "PUSH1234A" } } }, - "couldNotConnectToServer": "Nepodařilo se připojit k serveru.", - "errorRollOutNotPossibleAnymore": "Roll-out tohoto tokenu již není možný.", - "errorTokenExpired": "Platnost tokenu {name} vypršela.", - "@errorTokenExpired": { - "placeholders": { - "name": { - "example": "PUSH1234A" + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "@rename": { + "description": "Label that describes renaming the token." + }, + "@renameToken": { + "description": "Title of the dialog where a new name for a token can be entered." + }, + "@renameTokenFolder": { + "description": "Title of the dialog where a new name for a token folder can be entered." + }, + "@requestInfo": { + "description": "Description of the authentication request.", + "placeholders": { + "account": { + "example": "GitHub" + }, + "issuer": { + "example": "privacyIDEA" } } }, - "yes": "Ano", - "no": "Ne", - "butDiscardIt": "ale zahodit jej", - "declineIt": "odmítnout jej ", - "requestTriggerdByUserQuestion": "Byl tento požadavek vyvolán vámi?", - "grantCameraPermissionDialogTitle": "Camera permission is not granted", - "grantCameraPermissionDialogContent": "Please grant camera permission to scan QR codes.", - "grantCameraPermissionDialogPermanentlyDenied": "Oprávnění kamery je trvale odepřeno. Udělte prosím oprávnění fotoaparátu v nastavení telefonu.", - "grantCameraPermissionDialogButton": "Udělit oprávnění", - "decryptErrorTitle": "Chyba dešifrování", - "decryptErrorContent": "Bohužel se aplikaci nepodařilo dešifrovat vaše tokeny. To znamená, že šifrovací klíč je poškozen. Můžete to zkusit znovu nebo odstranit data aplikace, čímž by došlo k odstranění tokenů v aplikaci.", - "decryptErrorButtonDelete": "Odstranit", - "decryptErrorButtonSendError": "Odeslat chybu", - "decryptErrorButtonRetry": "Opakování", - "decryptErrorDeleteConfirmationContent": "Jste si jisti, že chcete data aplikace odstranit?", - "hidePushTokens": "Skrýt push tokeny", - "hidePushTokensDescription": "Skrýt push tokeny ze seznamu tokenů. Tím se tokeny neodstraní a budou stále viditelné na samostatné obrazovce.", - "settingsGroupGeneral": "Obecné informace", - "licensesAndVersion": "Licence a verze", - "privacyPolicy": "Zásady ochrany osobních údajů", - "introScanQrCode": "Podporujeme všechny běžné dvoufaktorové autentizační tokeny a také tokeny privacyIDEA.", - "introAddTokenManually": "Pokud nechcete skenovat QR kód, můžete tokeny přidávat také ručně.", - "introTokenSwipe": "Přejetím po tokenech doleva zobrazíte dostupné akce.", - "introEditToken": "Zde můžete upravit název tokenu a zobrazit některé podrobnosti.", - "introLockToken": "To improve security even more, you can lock tokens. Then the token can only be used after authentication.", - "introDragToken": "Reorganizujte tokeny tak, že je na několik sekund stisknete a poté je přetáhnete na požadované místo.", - "introAddFolder": "Můžete vytvářet složky\npro uspořádání svých tokenů.", - "introPollForChallenges": "Můžete zkontrolovat nové výzvy přetažením seznamu tokenů dolů.", - "introHidePushTokens": "Vaše push tokeny jsou nyní skryté.\nNa obrazovce push tokenů je však stále vidíte.", - "legacySigningErrorTitle": "Při použití staršího tokenu došlo k chybě: {tokenLabel}", - "@legacySigningErrorTitle": { - "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "@requestPushChallengesPeriodically": { + "description": "The description of the polling feature." + }, + "@retry": { + "description": "Label for e.g. a button. Something is tried to be done again." + }, + "@rolloutCompleted": { + "description": "Message for the rollout process" + }, + "@scanQrCode": { + "description": "The button to scan otpauth qr-codes." + }, + "@secretIsRequired": { + "description": "Error message when the secret is missing." + }, + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "@send": { + "description": "Button to send the error log." + }, + "@sendErrorDialogBody": { + "description": "Description shown to the user about what info the error report contains." + }, + "@sendErrorLogDescription": { + "description": "Explanation for the user what he will send." + }, + "@sendPushRequestResponseFailed": { + "description": "Error message when the response to a push request could not be sent." + }, + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "@serverNotReachable": { + "description": "Tells the user that the server could not be reached." + }, + "@settings": { + "description": "Button to open the settings page." + }, + "@showDetails": { + "description": "Button to show details." + }, + "@showErrorLog": { + "description": "Button to show the error log." + }, + "@showPrivacyPolicy": { + "description": "Button to show the privacy policy." + }, + "@signInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "@someTokensDoNotSupportPolling": { + "description": "Tells the user, that the following tokens do not support polling.", + "type": "text" + }, + "@startRollout": { + "description": "Label that tells the user that the token is being rolled out." + }, + "@statusCode": { + "description": "Tells the user the status code of the error.", "placeholders": { - "tokenLabel": { - "example": "PUSH1234A" + "statusCode": { + "example": "400" } } }, - "legacySigningErrorMessage": "Token byl vytvořen v zastaralé verzi aplikace, což může vést k problémům při jeho používání.\nPokud problém přetrvává, doporučujeme vytvořit nový push token!", - "@legacySigningErrorMessage": { - "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." + "@sync": { + "description": "Text of button that is used to synchronize push tokens." }, - "selectImportSource": "Vyberte zdroj importu", - "selectImportType": "Jak chcete importovat žetony?", - "importTokens": "Importní token", - "importNTokens": "{count, plural, zero{Neimportujte žádné tokeny} one{Importovat jeden token} other{Importovat {count} tokenů}}", - "selectFile": "Vybrat soubor", - "decrypt": "Dešifrovat", - "tokensAreEncrypted": "Tokeny jsou zašifrované. Please enter the password to decrypt them.", - "tokensNotEncrypted": "Tokeny nejsou šifrované a lze je importovat přímo.", - "tokensSuccessfullyDecrypted": "Tokeny byly úspěšně dešifrovány a nyní je lze importovat.", - "password": "Heslo", - "wrongPassword": "Nesprávné heslo", - "qrScan": "Skenování", - "enterLink": "Zadejte odkaz", - "invalidBackupFile": "Vybraný soubor není platnou zálohou {appName}.", - "invalidQrScan": "Naskenovaný QR kód není platnou zálohou {appName}.", - "invalidQrFile": "Vybraný soubor neobsahuje platný QR kód z {appName}.", - "invalidLink": "Zadaný odkaz není platným tokenem {appName} nebo není podporován.", - "importFailedToken": "{count, plural, zero{Žádný token Nepodařilo se importovat.} one{Nepodařilo se importovat token.} other{Nepodařilo se importovat {count} tokenů.}}", - "importExistingToken": "{count, plural, zero{Nebyl nalezen žádný token, který by se již v aplikaci nacházel.} one{Byl nalezen token, který již v aplikaci existuje.} other{{count} byly nalezeny tokeny, které se již v aplikaci nacházejí.}}", - "importConflictToken": "{count, plural, zero{Není žádný konflikt s tokeny, které již existují.} one{Je konflikt s tokeny, které již existují.\nProsím, vyberte, který z nich chcete zachovat.} other{Je konflikt s tokeny, které již existují.\nProsím, vyberte, který z nich chcete zachovat.}}", - "importNewToken": "{count, plural, zero{Nebyl nalezen žádný nový token.} one{Byl nalezen nový token, který lze importovat.} other{Bylo nalezeno {count} nových tokenů, které lze importovat.}}", - "importHintPrivacyIdeaQrScan": "Chcete-li vytvořit QR kódy žetonů, přejděte do nastavení a klepněte na \"Export\". Poté vyberte \"Jako QR kód\" a klepněte na token, který chcete exportovat. Tato varianta je vhodná pouze pro přímý přenos do jiného zařízení, protože QR kód není šifrovaný.", - "importHintPrivacyIdeaFile": "Chcete-li vytvořit zálohu, přejděte do nastavení a klepněte na položku \"Export\". Vyberte \"Jako soubor\" a vyberte tokeny, které chcete exportovat. Potom klepněte na \"Exportovat\" a nastavte heslo. Úložištěm je složka pro stahování ve vašem zařízení.", - "importHint2FAS": "Vyberte zálohu 2FAS.\nPokud nemáte zálohu, vytvořte ji v aplikaci 2FAS. Doporučujeme použít heslo.", - "importHintAegisBackupFile": "Vyberte svůj export Aegis (.JSON).\nPokud nemáte export, vytvořte si jej prostřednictvím nabídky nastavení v aplikaci Aegis. Doporučujeme použít heslo.", - "importHintAegisQrScan": "Naskenujte QR kód, který obdržíte při přenosu záznamů z aplikace Aegis.", - "importHintAegisLink": "Zadejte odkaz, který obdržíte při přenosu záznamů ze systému Aegis.", - "importHintGoogleQrScan": "Naskenujte QR kód, který obdržíte při exportu účtů z Google Authenticator.", - "importHintGoogleQrFile": "Vyberte obrazový soubor s QR kódem, který obdržíte při exportu účtů z Google Authenticator.\n!! Upozorňujeme, že není bezpečné ukládat QR kód do zařízení, protože tokeny nejsou šifrovány !!", - "importHintAuthenticatorProFile": "Chcete-li vytvořit zálohu aplikace Authenticator Pro, přejděte do nastavení a klepněte na položku \"Automatické zálohování\". Vyberte umístění úložiště a nastavte heslo. Poté stiskněte \"Zálohovat nyní\" a exportujte tokeny.", - "importHintFreeOtpPlusQrScan": "Naskenujte QR kód, který obdržíte po stisknutí tří teček na dlaždici tokenu, a vyberte možnost \"Sdílet QR kód\".", - "importHintFreeOtpPlusFile": "Chcete-li vytvořit zálohu aplikace FreeOTP+, klepněte na tři tečky v pravém horním rohu a vyberte možnost \"Exportovat\". Můžete si vybrat mezi formátem JSON a URI. Zálohu doporučujeme po importu odstranit, protože není šifrovaná.", - "qrFileDecodeError": "Z vybraného obrázku nebylo možné dekódovat QR kód, použijte prosím místo toho skener QR kódů.", - "tokenLink": "Token link", - "feedback": "Zpětná vazba", - "feedbackTitle": "Vaše zpětná vazba je vždy vítána!", - "feedbackDescription": "Pokud máte nějaké dotazy, návrhy nebo problémy, dejte nám prosím vědět.", - "feedbackHint": "Otevře se připravený e-mail, který nám můžete zaslat. V případě potřeby budou doplněny informace o vašem zařízení a verzi aplikace. Před odesláním můžete e-mail zkontrolovat a upravit.", - "feedbackPrivacyPolicy1": "Odesláním zpětné vazby souhlasíte s našimi ", - "feedbackPrivacyPolicy2": "zásadami ochrany osobních údajů", - "@feedbackPrivacyPolicy2": { - "description": "Taping on this should open the privacy policy." + "@syncContainerFailed": { + "description": "Error message when synchronizing a container failed." }, - "feedbackPrivacyPolicy3": ".", - "addSystemInfo": "Přidat systémové informace", - "feedbackSentTitle": "Zpětná vazba odeslána", - "feedbackSentDescription": "Děkujeme vám za pomoc při vylepšování této aplikace!", - "patchNotesDialogTitle": "Co je nového?", - "version": "Verze", - "noMailAppTitle": "Není nainstalována žádná e-mailová aplikace", - "noMailAppDescription": "There is no e-mail app installed or initialised on this device, please try again when you are able to send an email message.", - "authenticationRequest": "Žádost o ověření", - "requestInfo": "Odesláno {issuer} pro váš účet: \"{account}\"", - "@requestInfo": { + "@syncFbTokenFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "@systemTheme": { + "description": "The systems theme." + }, + "@theSecretDoesNotFitTheCurrentEncoding": { + "description": "Hint telling the user that the secret does not fit the selected encoding." + }, + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "@themeMode": { + "description": "Title of the setting group where the theme mode can be changed." + }, + "@timeOut": { + "description": "Error message when a request times out." + }, + "@tokenDataParseError": { + "description": "Error message when the token data could not be parsed." + }, + "@tokenDetails": { + "description": "Title of the token details menu." + }, + "@tokenSerial": { + "description": "Label for the token serial number." + }, + "@tokensDoNotSupportSynchronization": { + "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + }, + "@type": { + "description": "Title of the dropdown button where the type of the token is selected." + }, + "@unexpectedError": { + "description": "Title of page report mode." + }, + "@unknown": { + "description": "Tells that something is unknown." + }, + "@unlock": { + "description": "Description of button that unlocks a token." + }, + "@unsupported": { "placeholders": { - "issuer": { - "example": "privacyIDEA" + "name": { + "example": "piauth version" }, - "account": { - "example": "GitHub" + "value": { + "example": "5" } } }, - "errorUnlinkingPushToken": "Nepodařilo se odlinkovat push token {label}.", - "@errorUnlinkingPushToken": { - "description": "Error message when unlinking a push token failed.", + "@useDeviceLocaleDescription": { + "description": "Description of the switch tile where using the devices language can be enabled." + }, + "@useDeviceLocaleTitle": { + "description": "Title of the switch tile where using the devices language can be enabled." + }, + "@valueNotAllowed": { "placeholders": { - "label": { - "example": "PUSH1234A" + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "pleaseSyncManuallyWhenNetworkIsAvailable": "Synchronizujte prosím push tokeny ručně prostřednictvím nastavení, když je k dispozici síťové připojení.", - "pushTokens": "Žetony Push", - "continueButton": "Pokračovat", - "addTokenManually": "Přidat token ručně", - "addFolder": "Přidat složku", - "searchTokens": "Hledat tokeny", - "closeSearchTokens": "Zavřít vyhledávání", - "increaseCounter": "Zvýšit počítadla", - "copyOTPToClipboard": "Zkopírovat OTP do schránky", - "licenses": "Licence", - "optionalMessage": "Volitelná zpráva", - "confirmation": "Potvrzení", - "askLogSendedDescription": "Odeslali jste protokol a chcete jej nyní vymazat?", - "algorithmUnsupported": "Algoritmus {algorithm} není podporován", - "@algorithmUnsupported": { + "@valueNotAllowedIn": { "placeholders": { - "algorithm": { - "example": "MD5" + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "thisAppIsOpenSource": "Tato aplikace má otevřený zdrojový kód\nNavštivte nás na GitHub", - "invalidArgument": "{argument} není platná hodnota pro {type}", - "importExportTokens": "Import/Exportovat žetony", - "exportNonPrivacyIDEATokens": "Exportovat ne-privacyIDEA žetony", - "selectTokensToExport": "{count, plural, zero{} one{Vyberte žeton k exportu} other{Vyberte žetony k exportu}}", - "noTokenToExport": "Pro export není k dispozici žádný token", - "exportAllTokens": "Exportovat všechny žetony", - "export": "Export", - "exportingTokens": "Probíhá export žetonů...", - "exportTokens": "Exportovat žetony", - "enterPasswordToEncrypt": "Zadejte heslo pro šifrování žetonů. Toto heslo bude vyžadováno k importu žetonů.", - "exportLockedTokenReason": "Prosím, ověřte se, abyste mohli exportovat uzamčené žetony.", - "fileSavedToDownloadsFolder": "Soubor uložen do složky Stažené soubory", - "errorSavingFile": "Chyba při ukládání souboru", - "asQrCode": "Jako QR kód", + "@verboseLogging": { + "description": "Title of the switch tile where verbose logging can be enabled." + }, + "accept": "Přijmout", + "addANewFolder": "Vytvoření nové složky", + "addFolder": "Přidat složku", + "addSystemInfo": "Přidat systémové informace", + "addToken": "Přidat token", + "addTokenManually": "Přidat token ručně", + "algorithm": "Algoritmus", + "algorithmUnsupported": "Algoritmus {algorithm} není podporován", + "allTokensSynchronized": "Všechny tokeny jsou synchronizované.", "asFile": "Jako soubor", - "scanThisQrWithNewDevice": "Naskenujte tento QR kód svým novým zařízením pro import žetonu.", - "oneMore": "Ještě jeden", - "done": "Hotovo", + "asQrCode": "Jako QR kód", + "askLogSendedDescription": "Odeslali jste protokol a chcete jej nyní vymazat?", + "authNotSupportedBody": "Tato akce vyžaduje, aby bylo zařízení chráněno zámkem zařízení nebo biometrickým ověřením.", + "authNotSupportedTitle": "Vyžadován zámek zařízení nebo biometrické ověření", + "authToAcceptPushRequest": "Pro přijetí požadavku na push notifikaci se přihlaste.", + "authToDeclinePushRequest": "Pro odmítnutí požadavku na push notifikaci se přihlaste.", + "authenticateToShowOtp": "Pro zobrazení jednorázového kódu se přihlaste.", + "authenticateToUnLockToken": "Pro změnu uzamčení tokenu se přihlaste.", + "authenticationRequest": "Žádost o ověření", + "biometricHint": "Vyžadováno přihlášení", + "biometricNotRecognized": "Ověření se nezdařilo. Zkuste to znovu.", + "biometricRequiredTitle": "Biometrické ověření není nastaveno", + "biometricSuccess": "Přihlášení bylo úspěšné", + "butDiscardIt": "ale zahodit jej", + "cancel": "Zrušit", + "checkServerCertificate": "Zkontrolujte prosím certifikát serveru", + "checkYourNetwork": "Zkontrolujte prosím síťové připojení a zkuste to znovu.", + "clearErrorLog": "Vymazat", + "closeSearchTokens": "Zavřít vyhledávání", + "confirmDeletion": "Potvrdit smazání", + "confirmDeletionOf": "Opravdu chcete smazat token {name}?", + "confirmFolderDeletionHint": "Odstranění složky nemá žádný vliv na tokeny v ní.\nTokeny jsou přesunuty do hlavního seznamu.", "confirmPassword": "Potvrďte heslo", + "confirmTokenDeletionHint": "Pokud tento token odstraníte, nebude již možné se přihlásit.\nProsím, ujistěte se, že se můžete přihlásit k přidruženému účtu bez tohoto tokenu.", + "confirmation": "Potvrzení", + "connectionFailed": "Připojení se nezdařilo.", + "container": "Kontejner", + "continueButton": "Pokračovat", + "copyOTPToClipboard": "Zkopírovat OTP do schránky", + "couldNotConnectToServer": "Nepodařilo se připojit k serveru.", + "couldNotSignMessage": "Zprávu se nepodařilo podepsat.", + "counter": "Pult", + "create": "Vytvořit", + "createdAt": "Vytvořeno dne", + "creator": "Tvůrce", + "decline": "Odmítnout", + "declineIt": "odmítnout jej ", + "decrypt": "Dešifrovat", + "decryptErrorButtonDelete": "Odstranit", + "decryptErrorButtonRetry": "Opakování", + "decryptErrorButtonSendError": "Odeslat chybu", + "decryptErrorContent": "Bohužel se aplikaci nepodařilo dešifrovat vaše tokeny. To znamená, že šifrovací klíč je poškozen. Můžete to zkusit znovu nebo odstranit data aplikace, čímž by došlo k odstranění tokenů v aplikaci.", + "decryptErrorDeleteConfirmationContent": "Jste si jisti, že chcete data aplikace odstranit?", + "decryptErrorTitle": "Chyba dešifrování", + "delete": "Smazat", + "deleteLockedToken": "Prosím, autentifikujte se pro smazání uzamčeného tokenu.", + "deviceCredentialsRequiredTitle": "Není nastaven zámek zařízení", + "deviceCredentialsSetupDescription": "Nastave zámek zařízení v nastavení zařízení", + "digits": "Počet číslic", + "dismiss": "Zavřít", + "done": "Hotovo", + "edit": "Upravit", + "editLockedToken": "Prosím, autentifikujte se pro úpravu uzamčeného tokenu.", + "editToken": "Upravit token", + "enablePolling": "Povolit polling", + "encoding": "Kódování", + "enterDetailsForToken": "Vložte podrobnosti tokenu", + "enterLink": "Zadejte odkaz", + "enterPasswordToEncrypt": "Zadejte heslo pro šifrování žetonů. Toto heslo bude vyžadováno k importu žetonů.", + "errorLogCleared": "Protokol chyb vymazán.", + "errorLogEmpty": "Protokol chyb je prázdný.", + "errorLogTitle": "Protokol chyb", + "errorMailBody": "Přiložen je soubor protokolu o chybách.\nTento text můžete nahradit dalšími informacemi o chybě.", + "errorRollOutFailed": "Registrace tokenu {name} selhala.", + "errorRollOutNoConnectionToServer": "Registrace tokenu {name} selhala. Server není dostupný.", + "errorRollOutNotPossibleAnymore": "Roll-out tohoto tokenu již není možný.", + "errorRollOutSSLHandshakeFailed": "SSL handshake se nezdařil. Roll-out není možný.", + "errorRollOutUnknownError": "Vyskytla se neznámá chyba. Registrace není možná: {e}", + "errorSavingFile": "Chyba při ukládání souboru", + "errorSynchronizationNoNetworkConnection": "Synchronizace tokenů selhala, připojení k serveru privacyIDEA se nezdařilo.", + "errorTokenExpired": "Platnost tokenu {name} vypršela.", + "errorUnlinkingPushToken": "Nepodařilo se odlinkovat push token {label}.", + "errorWhenPullingChallenges": "Při dotazování na výzvy {name} došlo k chybě.", "exampleUrl": "Zadejte prosím platnou adresu URL, například: \"https://example.com/\"", - "pushEndpointUrl": "URL koncového bodu push", + "expandLockedFolder": "Chcete-li otevřít uzamčenou složku, ověřte se.", + "export": "Export", + "exportAllTokens": "Exportovat všechny žetony", + "exportLockedTokenReason": "Prosím, ověřte se, abyste mohli exportovat uzamčené žetony.", + "exportNonPrivacyIDEATokens": "Exportovat ne-privacyIDEA žetony", + "exportTokens": "Exportovat žetony", + "exportingTokens": "Probíhá export žetonů...", + "failedToLoad": "Nepodařilo se načíst:", + "feedback": "Zpětná vazba", + "feedbackDescription": "Pokud máte nějaké dotazy, návrhy nebo problémy, dejte nám prosím vědět.", + "feedbackHint": "Otevře se připravený e-mail, který nám můžete zaslat. V případě potřeby budou doplněny informace o vašem zařízení a verzi aplikace. Před odesláním můžete e-mail zkontrolovat a upravit.", + "feedbackPrivacyPolicy1": "Odesláním zpětné vazby souhlasíte s našimi ", + "feedbackPrivacyPolicy2": "zásadami ochrany osobních údajů", + "feedbackPrivacyPolicy3": ".", + "feedbackSentDescription": "Děkujeme vám za pomoc při vylepšování této aplikace!", + "feedbackSentTitle": "Zpětná vazba odeslána", + "feedbackTitle": "Vaše zpětná vazba je vždy vítána!", + "fileSavedToDownloadsFolder": "Soubor uložen do složky Stažené soubory", + "findingQrCodeInImage": "Hledání QR kódu v obrázku...", + "firebaseToken": "Token Firebase", + "folderName": "Název složky", + "generatingPhonePart": "Generování klientské části", + "generatingRSAKeyPair": "Generování párů klíčů RSA", + "generatingRSAKeyPairFailed": "Generování páru klíčů RSA se nezdařilo", + "goToSettingsButton": "Otevřít nastavení", + "goToSettingsDescription": "Není nastaveno přihlášení zámkem zařízení ani biometrické ověření. Aktivujte je v nastavení zařízení.", + "grantCameraPermissionDialogButton": "Udělit oprávnění", + "grantCameraPermissionDialogContent": "Please grant camera permission to scan QR codes.", + "grantCameraPermissionDialogPermanentlyDenied": "Oprávnění kamery je trvale odepřeno. Udělte prosím oprávnění fotoaparátu v nastavení telefonu.", + "grantCameraPermissionDialogTitle": "Camera permission is not granted", + "handshakeFailed": "Handshake se nezdařil", + "hidePushTokens": "Skrýt push tokeny", + "hidePushTokensDescription": "Skrýt push tokeny ze seznamu tokenů. Tím se tokeny neodstraní a budou stále viditelné na samostatné obrazovce.", + "imageUrl": "URL obrázku", + "importConflictToken": "{count, plural, zero{Není žádný konflikt s tokeny, které již existují.} one{Je konflikt s tokeny, které již existují.\nProsím, vyberte, který z nich chcete zachovat.} other{Je konflikt s tokeny, které již existují.\nProsím, vyberte, který z nich chcete zachovat.}}", + "importExistingToken": "{count, plural, zero{Nebyl nalezen žádný token, který by se již v aplikaci nacházel.} one{Byl nalezen token, který již v aplikaci existuje.} other{{count} byly nalezeny tokeny, které se již v aplikaci nacházejí.}}", + "importExportTokens": "Import/Exportovat žetony", + "importFailedToken": "{count, plural, zero{Žádný token Nepodařilo se importovat.} one{Nepodařilo se importovat token.} other{Nepodařilo se importovat {count} tokenů.}}", + "importHint2FAS": "Vyberte zálohu 2FAS.\nPokud nemáte zálohu, vytvořte ji v aplikaci 2FAS. Doporučujeme použít heslo.", + "importHintAegisBackupFile": "Vyberte svůj export Aegis (.JSON).\nPokud nemáte export, vytvořte si jej prostřednictvím nabídky nastavení v aplikaci Aegis. Doporučujeme použít heslo.", + "importHintAegisLink": "Zadejte odkaz, který obdržíte při přenosu záznamů ze systému Aegis.", + "importHintAegisQrScan": "Naskenujte QR kód, který obdržíte při přenosu záznamů z aplikace Aegis.", + "importHintAuthenticatorProFile": "Chcete-li vytvořit zálohu aplikace Authenticator Pro, přejděte do nastavení a klepněte na položku \"Automatické zálohování\". Vyberte umístění úložiště a nastavte heslo. Poté stiskněte \"Zálohovat nyní\" a exportujte tokeny.", + "importHintFreeOtpPlusFile": "Chcete-li vytvořit zálohu aplikace FreeOTP+, klepněte na tři tečky v pravém horním rohu a vyberte možnost \"Exportovat\". Můžete si vybrat mezi formátem JSON a URI. Zálohu doporučujeme po importu odstranit, protože není šifrovaná.", + "importHintFreeOtpPlusQrScan": "Naskenujte QR kód, který obdržíte po stisknutí tří teček na dlaždici tokenu, a vyberte možnost \"Sdílet QR kód\".", + "importHintGoogleQrFile": "Vyberte obrazový soubor s QR kódem, který obdržíte při exportu účtů z Google Authenticator.\n!! Upozorňujeme, že není bezpečné ukládat QR kód do zařízení, protože tokeny nejsou šifrovány !!", + "importHintGoogleQrScan": "Naskenujte QR kód, který obdržíte při exportu účtů z Google Authenticator.", + "importHintPrivacyIdeaFile": "Chcete-li vytvořit zálohu, přejděte do nastavení a klepněte na položku \"Export\". Vyberte \"Jako soubor\" a vyberte tokeny, které chcete exportovat. Potom klepněte na \"Exportovat\" a nastavte heslo. Úložištěm je složka pro stahování ve vašem zařízení.", + "importHintPrivacyIdeaQrScan": "Chcete-li vytvořit QR kódy žetonů, přejděte do nastavení a klepněte na \"Export\". Poté vyberte \"Jako QR kód\" a klepněte na token, který chcete exportovat. Tato varianta je vhodná pouze pro přímý přenos do jiného zařízení, protože QR kód není šifrovaný.", + "importNTokens": "{count, plural, zero{Neimportujte žádné tokeny} one{Importovat jeden token} other{Importovat {count} tokenů}}", + "importNewToken": "{count, plural, zero{Nebyl nalezen žádný nový token.} one{Byl nalezen nový token, který lze importovat.} other{Bylo nalezeno {count} nových tokenů, které lze importovat.}}", + "importTokens": "Importní token", + "importedVia": "Dovezeno prostřednictvím", + "increaseCounter": "Zvýšit počítadla", + "internalServerError": "Interní chyba serveru ({code})", + "introAddFolder": "Můžete vytvářet složky\npro uspořádání svých tokenů.", + "introAddTokenManually": "Pokud nechcete skenovat QR kód, můžete tokeny přidávat také ručně.", + "introDragToken": "Reorganizujte tokeny tak, že je na několik sekund stisknete a poté je přetáhnete na požadované místo.", + "introEditToken": "Zde můžete upravit název tokenu a zobrazit některé podrobnosti.", + "introHidePushTokens": "Vaše push tokeny jsou nyní skryté.\nNa obrazovce push tokenů je však stále vidíte.", + "introLockToken": "To improve security even more, you can lock tokens. Then the token can only be used after authentication.", + "introPollForChallenges": "Můžete zkontrolovat nové výzvy přetažením seznamu tokenů dolů.", + "introScanQrCode": "Podporujeme všechny běžné dvoufaktorové autentizační tokeny a také tokeny privacyIDEA.", + "introTokenSwipe": "Přejetím po tokenech doleva zobrazíte dostupné akce.", + "invalidBackupFile": "Vybraný soubor není platnou zálohou {appName}.", + "invalidLink": "Zadaný odkaz není platným tokenem {appName} nebo není podporován.", + "invalidQrFile": "Vybraný soubor neobsahuje platný QR kód z {appName}.", + "invalidQrScan": "Naskenovaný QR kód není platnou zálohou {appName}.", + "invalidValue": "untranslated", + "invalidValueIn": "untranslated", + "isExpotableQuestion": "Lze exportovat?", + "isPiTokenQuestion": "Je to token privacyIDEA?", + "language": "Jazyk", + "legacySigningErrorMessage": "Token byl vytvořen v zastaralé verzi aplikace, což může vést k problémům při jeho používání.\nPokud problém přetrvává, doporučujeme vytvořit nový push token!", + "legacySigningErrorTitle": "Při použití staršího tokenu došlo k chybě: {tokenLabel}", + "licenses": "Licence", + "licensesAndVersion": "Licence a verze", + "linkedContainer": "Propojený kontejner", + "lock": "Zamknout", + "lockOut": "Biometrické ověření je deaktivováno. Pro aktivaci zamkněte a znovu odemkněte obrazovku/zařízení.", + "logMenu": "Nabídka protokolu", + "malformedData": "Data nejsou ve správném formátu", + "markQrCode": "Označte QR kód", + "missingRequiredParameter": "Hodnota parametru [{parameter}] je povinná, ale chybí.", + "missingRequiredParameterIn": "Hodnota parametru [{parameter}] je povinná, ale v \"{map}\" chybí.", "mustNotBeEmpty": "{field} nesmí být prázdné", - "@mustNotBeEmpty": { - "placeholders": { - "field": { - "example": "Name" - } - } - }, - "sendPushRequestResponseFailed": "Odpověď se nepodařilo odeslat.", - "@sendPushRequestResponseFailed": { - "description": "Error message when the response to a push request could not be sent." - }, + "name": "Název", + "no": "Ne", + "noFbToken": "Není k dispozici žádný token Firebase.", + "noMailAppDescription": "There is no e-mail app installed or initialised on this device, please try again when you are able to send an email message.", + "noMailAppTitle": "Není nainstalována žádná e-mailová aplikace", + "noNetworkConnection": "Žádné připojení k síti.", + "noPublicKey": "Není k dispozici žádný veřejný klíč.", + "noResultText1": "stiskněte tlačítko ", + "noResultText2": " a začněte s používáním.", + "noResultTitle": "Nejsou nainstalovány žádné tokeny.", + "noTokenToExport": "Pro export není k dispozici žádný token", + "notAnInteger": "Hodnota není celé číslo.", + "notAnNumber": "Hodnota není číslo.", + "ok": "Ok", + "oneMore": "Ještě jeden", + "open": "Otevřít", + "optionalMessage": "Volitelná zpráva", + "originApp": "Aplikace Origin", + "originDetails": "Podrobnosti o původu", + "otpValueCopiedMessage": "Heslo \"{otpValue}\" bylo zkopírováno do schránky.", + "parsingResponse": "Rozbor odpovědi", + "parsingResponseFailed": "Parsování odpovědi se nezdařilo", + "password": "Heslo", "passwordCannotBeEmpty": "Heslo nesmí být prázdné", - "passwordMustBeAtLeast8Characters": "Heslo musí obsahovat alespoň 8 znaků", "passwordCannotContainWhitespace": "Heslo nesmí obsahovat mezery", + "passwordMustBeAtLeast8Characters": "Heslo musí obsahovat alespoň 8 znaků", "passwordMustContainLowercaseLetter": "Heslo musí obsahovat malé písmeno", - "passwordMustContainUppercaseLetter": "Heslo musí obsahovat velké písmeno", "passwordMustContainNumber": "Heslo musí obsahovat číslo", "passwordMustContainSpecialCharacter": "Heslo musí obsahovat speciální znak", + "passwordMustContainUppercaseLetter": "Heslo musí obsahovat velké písmeno", "passwordsDoNotMatch": "Hesla se neshodují", - "selectTokensToExportHelpTitle": "Není váš token uveden?", - "selectTokensToExportHelpContent": "Pokud token není uveden v seznamu, není zaručeno, že se nejedná o token privacyIDEA.\nV současné době lze exportovat pouze ručně přidané a importované tokeny.", - "findingQrCodeInImage": "Hledání QR kódu v obrázku...", - "qrNotFound": "Žádný QR kód nebyl nalezen!", + "patchNotesBugFixes": "Opravy chyb", + "patchNotesDialogTitle": "Co je nového?", + "patchNotesImprovements": "Improvements", + "patchNotesNewFeatures": "Nové funkce", + "patchNotesV4_3_0NewFeatures1": "Přidána podpora pro import tokenů z Google, Aegis a 2FAS Authenticator. Další zdroje importu budou přidány v budoucnu.", + "patchNotesV4_3_0NewFeatures2": "Do nastavení byla přidána možnost zpětné vazby.", + "patchNotesV4_3_0NewFeatures3": "Tokeny Push lze nyní skrýt ze seznamu tokenů.", + "patchNotesV4_3_0NewFeatures4": "Byly přidány úvodní informace, které novým uživatelům usnadní začátky.", + "patchNotesV4_3_0NewFeatures5": "Žetony nyní můžete vyhledávat klepnutím na lupu v pravém horním rohu.", + "patchNotesV4_3_0NewFeatures6": "Přidán token HomeWidget pro systém Android 12 a novější.", + "patchNotesV4_3_1BugFix1": "Opraven problém, kdy nebyla zobrazena hodnota otp po ověření na některých zařízeních.", + "patchNotesV4_3_1Improvement1": "Skener QR kódů byl vylepšen.", + "patchNotesV4_4_0Improvement1": "Byly přidány další dovozní zdroje.", + "patchNotesV4_4_0Improvement2": "Bylo vylepšeno rozpoznávání QR kódů z obrazových souborů.", + "patchNotesV4_4_0NewFeatures1": "Nyní je možné exportovat tokeny, u kterých lze zajistit, že se nejedná o tokeny privacyIDEA. V současné době nelze vyloučit, že tokeny přidané prostřednictvím čtečky QR kódů pocházejí z aplikace privacyIDEA. Rozlišování bude v budoucích verzích vylepšeno.", + "patchNotesV4_4_0NewFeatures2": "Přidána podpora pro \"require presence\" aplikace privacyIDEA.", + "period": "Časový interval", + "phonePart": "Klientská část:", + "pleaseEnterANameForThisToken": "Vložte název pro tento token.", + "pleaseEnterASecretForThisToken": "Vložte tajný klíč pro tento token.", + "pleaseSyncManuallyWhenNetworkIsAvailable": "Synchronizujte prosím push tokeny ručně prostřednictvím nastavení, když je k dispozici síťové připojení.", + "pollingChallenges": "Čekám na nové požadavky", + "pollingFailed": "Dotaz se nezdařil.", + "pollingFailedFor": "Dotaz na {serial} se nezdařil.", + "privacyPolicy": "Zásady ochrany osobních údajů", + "publicKey": "Veřejný klíč", + "pushEndpointUrl": "URL koncového bodu push", + "pushRequestParseError": "Požadavek na odeslání se nepodařilo zpracovat.", + "pushToken": "Push notifikace", + "pushTokens": "Žetony Push", + "qrFileDecodeError": "Z vybraného obrázku nebylo možné dekódovat QR kód, použijte prosím místo toho skener QR kódů.", "qrInFileNotFound": "Ve vybraném obrázku nebyl nalezen žádný QR kód.", "qrInFileNotFound2": "Můžete mi ukázat, kde se QR kód nachází.", "qrInFileNotFound3": "Předpokládám, že kód najdu, pokud se nachází uprostřed označené oblasti.", - "markQrCode": "Označte QR kód", - "malformedData": "Data nejsou ve správném formátu" + "qrNotFound": "Žádný QR kód nebyl nalezen!", + "qrScan": "Skenování", + "rename": "Přejmenovat", + "renameToken": "Přejmenovat token", + "renameTokenFolder": "Přejmenování složky", + "requestInfo": "Odesláno {issuer} pro váš účet: \"{account}\"", + "requestPushChallengesPeriodically": "Periodicky získávat výzvy ze serveru. Povolte pokud nefunguje příjem push notifikací.", + "requestTriggerdByUserQuestion": "Byl tento požadavek vyvolán vámi?", + "retry": "Zkusit znovu", + "retryRollout": "Zkusit znovu", + "rolloutCompleted": "Zavedení dokončeno", + "save": "Uložit", + "scanQrCode": "Naskenovat QR kód", + "scanThisQrWithNewDevice": "Naskenujte tento QR kód svým novým zařízením pro import žetonu.", + "searchTokens": "Hledat tokeny", + "secretIsRequired": "Tajné je vyžadováno", + "secretKey": "Tajný klíč", + "selectFile": "Vybrat soubor", + "selectImportSource": "Vyberte zdroj importu", + "selectImportType": "Jak chcete importovat žetony?", + "selectTokensToExport": "{count, plural, zero{} one{Vyberte žeton k exportu} other{Vyberte žetony k exportu}}", + "selectTokensToExportHelpContent": "Pokud token není uveden v seznamu, není zaručeno, že se nejedná o token privacyIDEA.\nV současné době lze exportovat pouze ručně přidané a importované tokeny.", + "selectTokensToExportHelpTitle": "Není váš token uveden?", + "send": "Odeslat", + "sendErrorDialogBody": "V aplikaci se vyskytla neznámá chyba. Informace uvedené níže mohou být odeslány vývojářům e-mailem pro vyřešení chyby v budoucnu.", + "sendErrorLogDescription": "Vytvoří se připravený e-mail.\nObsahuje informace o aplikaci, chybě a zařízení.\nPřed odesláním můžete e-mail upravit.\nZde se můžete podívat, jak informace používáme:", + "sendPushRequestResponseFailed": "Odpověď se nepodařilo odeslat.", + "sendingRSAPublicKey": "Odeslání veřejného klíče RSA", + "sendingRSAPublicKeyFailed": "Nepodařilo se odeslat veřejný klíč RSA", + "serverNotReachable": "Na server se nepodařilo dovolat.", + "settings": "Nastavení", + "settingsGroupGeneral": "Obecné informace", + "showDetails": "Zobrazit podrobnosti", + "showErrorLog": "Zobrazit", + "showPrivacyPolicy": "Zobrazit zásady ochrany osobních údajů", + "signInTitle": "Vyžadováno přihlášení", + "someTokensDoNotSupportPolling": "Některé tokeny jsou zastaralé a nepodporují polling", + "startRollout": "Začít zavádění", + "statusCode": "Stavový kód: {statusCode}", + "sync": "Synchronizovat", + "syncContainerFailed": "Synchronizace kontejneru se nezdařila", + "syncFbTokenFailed": "Synchronizace následujících tokenů selhala, zkuste to znovu:", + "synchronizePushTokens": "Synchronizace push tokenů", + "synchronizesTokensWithServer": "Synchronizovat tokeny se serverem privacyIDEA.", + "synchronizingTokens": "Tokeny se synchronizují.", + "theSecretDoesNotFitTheCurrentEncoding": "Tajný klíč neodpovídá zvolenému kódování.", + "themeMode": "Vzhled", + "thisAppIsOpenSource": "Tato aplikace má otevřený zdrojový kód\nNavštivte nás na GitHub", + "timeOut": "Časový limit", + "tokenDataParseError": "Tokenová data nelze analyzovat", + "tokenDetails": "Podrobnosti o tokenu", + "tokenLink": "Token link", + "tokenSerial": "Token serial", + "tokensAreEncrypted": "Tokeny jsou zašifrované. Please enter the password to decrypt them.", + "tokensDoNotSupportSynchronization": "Následující tokeny nepodporují synchronizaci a musí být znovu zaregistrovány:", + "tokensNotEncrypted": "Tokeny nejsou šifrované a lze je importovat přímo.", + "tokensSuccessfullyDecrypted": "Tokeny byly úspěšně dešifrovány a nyní je lze importovat.", + "type": "Typ", + "unexpectedError": "Nastala neočekávaná chyba.", + "unknown": "Neznámý", + "unlock": "Odemknout", + "unsupported": "Příkaz {name} [{value}] není touto verzí aplikace podporován.", + "useDeviceLocaleDescription": "Použít jazyk zařízení, pokud je podporován, případně angličtinu.", + "useDeviceLocaleTitle": "Použít jazyk zařízení", + "validFor": "Platné pro", + "validUntil": "Platné do", + "valueNotAllowed": "untranslated", + "valueNotAllowedIn": "untranslated", + "verboseLogging": "Zevrubné protokolování", + "version": "Verze", + "wrongPassword": "Nesprávné heslo", + "yes": "Ano" } \ No newline at end of file diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 9e96c589f..a3eb80ab0 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -1,374 +1,362 @@ { - "@@last_modified": "2023-08-07", - "patchNotesNewFeatures": "Neue Funktionen", - "patchNotesImprovements": "Verbesserungen", - "patchNotesBugFixes": "Fehlerbehebungen", - "patchNotesV4_4_0NewFeatures1": "Es ist nun möglich, Token zu exportieren, bei denen sichergestellt werden kann, dass es sich nicht um privacyIDEA Token handelt. Derzeit kann nicht ausgeschlossen werden, dass über den QR-Code-Scanner hinzugefügte Token von privacyIDEA stammen. Die Differenzierung wird in zukünftigen Versionen verbessert.", - "patchNotesV4_4_0NewFeatures2": "Unterstützung für privacyIDEA's \"require presence\" hinzugefügt.", - "patchNotesV4_4_0Improvement1": "Es wurden weitere Importquellen hinzugefügt.", - "patchNotesV4_4_0Improvement2": "Die erkennung von QR-Codes aus Bilddateien wurde verbessert.", - "patchNotesV4_3_1BugFix1": "Ein Problem wurde behoben, bei dem der otp-Wert nach der Authentifizierung auf einigen Geräten nicht angezeigt wurde.", - "patchNotesV4_3_1Improvement1": "Der QR-Code-Scanner wurde verbessert.", - "patchNotesV4_3_0NewFeatures1": "Unterstützung für den Import von Token von Google, Aegis und 2FAS Authenticator hinzugefügt. Weitere Importquellen werden in Zukunft hinzugefügt.", - "patchNotesV4_3_0NewFeatures2": "Feedback-Option zu den Einstellungen hinzugefügt.", - "patchNotesV4_3_0NewFeatures3": "Push-Token können jetzt aus der Token-Liste ausgeblendet werden.", - "patchNotesV4_3_0NewFeatures4": "Es wurden Einführungen hinzugefügt, um neuen Benutzern den Einstieg zu erleichtern.", - "patchNotesV4_3_0NewFeatures5": "Sie können jetzt nach Token suchen, indem Sie auf die Lupe in der oberen rechten Ecke tippen.", - "patchNotesV4_3_0NewFeatures6": "Ab Android 12 kann für einen Token ein Widget auf dem Homescreen erstellt werden.", - "guide": "Anleitung", - "@guide": { - "description": "Button to open the guide screen." - }, - "retry": "Erneut versuchen", - "@retry": { - "description": "Label for e.g. a button. Something is tried to be done again." - }, - "accept": "Akzeptieren", + "@@last_modified": "2024-09-20", + "@@locale": "de", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." }, - "decline": "Ablehnen", - "@decline": { - "description": "Label for e.g. a button. Something gets declined by the user." - }, - "name": "Name", - "@name": { - "description": "Describes the field where the tokens name should be entered." - }, - "secretKey": "Geheimer Schlüssel", - "@secretKey": { - "description": "Describes the field where the tokens secret should be entered." - }, - "encoding": "Kodierung", - "@encoding": { - "description": "Title of the dropdown button where the encoding is selected." + "@addToken": { + "description": "The button to open the screen to add tokens by hand." }, - "algorithm": "Algorithmus", "@algorithm": { "description": "Title of the dropdown button where the encoding is selected." }, - "digits": "Ziffern", - "@digits": { - "description": "Title of the dropdown button where the number of digits for the opt value is selected." + "@algorithmUnsupported": { + "placeholders": { + "algorithm": { + "example": "MD5" + } + } }, - "type": "Art", - "@type": { - "description": "Title of the dropdown button where the type of the token is selected." + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." }, - "period": "Periode", - "@period": { - "description": "Title of the dropdown button where the period of the totp token is selected." + "@authNotSupportedBody": { + "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." }, - "rename": "Umbenennen", - "@rename": { - "description": "Label that describes renaming the token." + "@authNotSupportedTitle": { + "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." }, - "cancel": "Abbrechen", - "@cancel": { - "description": "Button to cancel an action." + "@authToAcceptPushRequest": { + "description": "Message to accepting a push request for authentication." }, - "delete": "Löschen", - "@delete": { - "description": "Label that describes deleting the token." + "@authToDeclinePushRequest": { + "description": "Message for declining a push request for authentication." }, - "dismiss": "Schließen", - "@dismiss": { - "description": "Text of a button that closes a dialog." + "@authenticateToShowOtp": { + "description": "Reason to authenticate when trying to view a one time password." }, - "addToken": "Token hinzufügen", - "@addToken": { - "description": "The button to open the screen to add tokens by hand." + "@authenticateToUnLockToken": { + "description": "Reason to authenticate when trying to lock or unlock a token." }, - "scanQrCode": "QR-Code scannen", - "@scanQrCode": { - "description": "The button to scan otpauth qr-codes." + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, - "enterDetailsForToken": "Neuen Token konfigurieren", - "@enterDetailsForToken": { - "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." + "@biometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterANameForThisToken": "Bitte geben Sie einen Namen ein.", - "@pleaseEnterANameForThisToken": { - "description": "Hint telling the user to enter a name for a token." + "@biometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterASecretForThisToken": "Bitte geben Sie ein Geheimnis ein.", - "@pleaseEnterASecretForThisToken": { - "description": "Hint telling the user to enter a secret for a token." + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, - "theSecretDoesNotFitTheCurrentEncoding": "Das Geheimnis entspricht nicht der gewählten Verschlüsselung.", - "@theSecretDoesNotFitTheCurrentEncoding": { - "description": "Hint telling the user that the secret does not fit the selected encoding." + "@cancel": { + "description": "Button to cancel an action." }, - "renameToken": "Token umbenennen", - "@renameToken": { - "description": "Title of the dialog where a new name for a token can be entered." + "@checkServerCertificate": { + "description": "Error message when the server certificate should be checked." + }, + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "@clearErrorLog": { + "description": "Button to clear the error log." }, - "confirmDeletion": "Löschen bestätigen", "@confirmDeletion": { "description": "Title of the dialog where a token can be deleted." }, - "confirmDeletionOf": "Sind Sie sicher dass Sie {name} löschen möchten?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", "placeholders": { "name": { "example": "PUSH1234" } - } - }, - "confirmTokenDeletionHint": "Unter Umständen können Sie sich nicht mehr einloggen, wenn Sie diesen Token löschen.\nBitte stellen Sie sicher, dass Sie sich ohne diesen Token in den dazugehörigen Account einloggen können.", - "@confirmTokenDeletionHint": { - "description": "Gives the user a hint about the consequences of deleting a token." + }, + "type": "text" }, - "confirmFolderDeletionHint": "Das Löschen eines Ordners hat keine Auswirkungen auf die Token, die sich darin befinden.\nDie Token werden in die Hauptliste verschoben.", "@confirmFolderDeletionHint": { "description": "Gives the user a hint about the consequences of deleting a folder." }, - "generatingPhonePart": "Generiere Telefonanteil", - "@generatingPhonePart": { - "description": "Title of a dialog telling the user that the phone part gets generated right now." + "@confirmTokenDeletionHint": { + "description": "Gives the user a hint about the consequences of deleting a token." }, - "phonePart": "Telefonanteil:", - "@phonePart": { - "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + "@connectionFailed": { + "description": "Tells the user that the connection failed." }, - "otpValueCopiedMessage": "Passwort \"{otpValue}\" wurde in Zwischenablage kopiert.", - "@otpValueCopiedMessage": { - "description": "Tells the user that the otp value was copied to the clipboard.", - "placeholders": { - "otpValue": { - "example": "055374" - } - } + "@container": { + "description": "Title for the container view." }, - "settings": "Einstellungen", - "@settings": { - "description": "Button to open the settings page." + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." }, - "pushToken": "Push Token", - "@pushToken": { - "description": "Title for the settings block concerning the push tokens." + "@counter": { + "description": "Describes the field where the tokens counter should be entered." }, - "theme": "Farbschema", - "@theme": { - "description": "Title of the setting group where the theme can be selected." + "@createdAt": { + "description": "Label for the creation date of the token." }, - "lightTheme": "Hell", - "@lightTheme": { - "description": "The light theme." + "@creator": { + "description": "Label for the creator of the token." }, - "darkTheme": "Dunkel", "@darkTheme": { "description": "The dark theme." }, - "systemTheme": "Nutze Farbschema des Geräts", - "@systemTheme": { - "description": "The systems theme." + "@decline": { + "description": "Label for e.g. a button. Something gets declined by the user." }, - "someTokensDoNotSupportPolling": "Einige der Token sind veraltet und unterstützen keine aktiven Anfragen", - "@someTokensDoNotSupportPolling": { - "description": "Tells the user, that the following tokens do not support polling.", - "type": "text", - "placeholders": {} + "@delete": { + "description": "Label that describes deleting the token." }, - "enablePolling": "Aktives Stellen von Push-Anfragen", - "@enablePolling": { - "description": "Name of the setting switch that enables polling." + "@deviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." }, - "requestPushChallengesPeriodically": "Fordert regelmäßig Push-Anfragen vom Server an. Aktivieren Sie diese Funktion, wenn Nachrichten ansonsten nicht erhalten werden.", - "@requestPushChallengesPeriodically": { - "description": "The description of the polling feature." + "@deviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." }, - "synchronizePushTokens": "Synchronisiere Push Token", - "@synchronizePushTokens": { - "description": "Title of synchronizing push tokens in settings." + "@digits": { + "description": "Title of the dropdown button where the number of digits for the opt value is selected." }, - "synchronizesTokensWithServer": "Synchronisiert Token mit dem privacyIDEA Server.", - "@synchronizesTokensWithServer": { - "description": "Description of synchronizing push tokens in settings." + "@dismiss": { + "description": "Text of a button that closes a dialog." }, - "sync": "Sync", - "@sync": { - "description": "Text of button that is used to synchronize push tokens." + "@enablePolling": { + "description": "Name of the setting switch that enables polling." }, - "synchronizingTokens": "Synchronisiere Token.", - "@synchronizingTokens": { - "description": "Title of the push synchronization dialog." + "@encoding": { + "description": "Title of the dropdown button where the encoding is selected." }, - "allTokensSynchronized": "Alle Token wurden synchronisiert.", - "@allTokensSynchronized": { - "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + "@enterDetailsForToken": { + "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." }, - "syncFbTokenFailed": "Synchronisation ist für die folgenden Token fehlgeschlagen:", - "@syncFbTokenFailed": { - "description": "Headline for the list of tokens where the synchronization failed." + "@errorLogCleared": { + "description": "Message that tells the user that the error log was cleared." }, - "tokensDoNotSupportSynchronization": "Die folgenden Token unterstützen keine Synchronisation und müssen erneut ausgerollt werden:", - "@tokensDoNotSupportSynchronization": { - "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + "@errorLogEmpty": { + "description": "Message that tells the user that the error log is empty." + }, + "@errorLogTitle": { + "description": "Title of the error log screen." + }, + "@errorMailBody": { + "description": "Message for email body" }, - "errorRollOutFailed": "Ausrollen von {name} ist fehlgeschlagen.", "@errorRollOutFailed": { "description": "Tells the user that the token could not be rolled out, because a network error occurred.", "placeholders": { "name": { "example": "PUSH1234A" } - } + }, + "type": "text" }, - "statusCode": "Statuscode: {statusCode}", - "@statusCode": { - "description": "Tells the user the status code of the error.", + "@errorRollOutNoConnectionToServer": { + "description": "Message for the rollout process", "placeholders": { - "statusCode": { - "example": "400" + "name": { + "example": "PUSH1234A" } } }, - "errorSynchronizationNoNetworkConnection": "Die Synchronisation ist fehlgeschlagen, da der privacyIDEA Server nicht erreicht werden konnte.", - "@errorSynchronizationNoNetworkConnection": { - "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." }, - "errorRollOutUnknownError": "Ein unbekannter Fehler ist aufgetreten. Aurollen nicht möglich: {e}", "@errorRollOutUnknownError": { "description": "Tells the user that the roll-out failed because of an unknown error.", "placeholders": { "e": { "example": "IllegalArgumentException on Line 5 ..." } - } - }, - "startRollout": "Starte Rollout", - "@startRollout": { - "description": "Label that tells the user that the token is being rolled out." + }, + "type": "text" }, - "pollingChallenges": "Frage ausstehende Authentifizierungsanfragen ab", - "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten.", - "@unexpectedError": { - "description": "Title of page report mode." + "@errorSynchronizationNoNetworkConnection": { + "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, - "pollingFailed": "Abfrage fehlgeschlagen.", - "@pollingFailed": { - "description": "Tells the user that the polling failed." + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "pollingFailedFor": "Abfrage für {serial} fehlgeschlagen.", - "@pollingFailedFor": { - "description": "Tells the user that the polling failed.", + "@errorUnlinkingPushToken": { + "description": "Error message when unlinking a push token failed.", "placeholders": { - "serial": { + "label": { "example": "PUSH1234A" } } }, - "noNetworkConnection": "Keine Netzwerkverbindung.", - "@noNetworkConnection": { - "description": "Tells the user that there is no network connection." + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "connectionFailed": "Verbindung fehlgeschlagen.", - "@connectionFailed": { - "description": "Tells the user that the connection failed." + "@failedToLoad": { + "placeholders": { + "name": { + "example": "token data" + } + } }, - "checkYourNetwork": "Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.", - "@checkYourNetwork": { - "description": "Tells the user to check the network connection." + "@feedbackPrivacyPolicy2": { + "description": "Tapping on this should open the privacy policy." }, - "serverNotReachable": "Der Server konnte nicht erreicht werden.", - "@serverNotReachable": { - "description": "Tells the user that the server could not be reached." + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." }, - "couldNotSignMessage": "Nachricht konnte nicht signiert werden.", - "@couldNotSignMessage": { - "description": "Tells the user that the message could not be signed." + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" }, - "useDeviceLocaleTitle": "Nutze Systemsprache", - "@useDeviceLocaleTitle": { - "description": "Title of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" }, - "useDeviceLocaleDescription": "Nutze Systemsprache, falls diese unterstützt wird. Anderenfalls nutze Englisch. ", - "@useDeviceLocaleDescription": { - "description": "Description of the switch tile where using the devices language can be enabled." + "@goToSettingsButton": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." }, - "language": "Sprache", - "@language": { - "description": "Title of language setting group." + "@goToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." }, - "authenticateToShowOtp": "Bitte authentifizieren Sie sich, um das Einmalpasswort anzuzeigen.", - "@authenticateToShowOtp": { - "description": "Reason to authenticate when trying to view a one time password." + "@guide": { + "description": "Button to open the guide screen." }, - "authenticateToUnLockToken": "Bitte authentifizieren Sie sich, um den Sperrstatus des Tokens zu ändern.", - "@authenticateToUnLockToken": { - "description": "Reason to authenticate when trying to lock or unlock a token." + "@handshakeFailed": { + "description": "Error message when the handshake failed." }, - "biometricRequiredTitle": "Biometrie ist nicht eingerichtet", - "@biometricRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + "@importedVia": { + "description": "Label for the import method of the token." }, - "biometricHint": "Authentifizierung wird benötigt", - "@biometricHint": { - "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + "@internalServerError": { + "placeholders": { + "code": { + "example": "500" + } + } }, - "biometricNotRecognized": "Biometrie wurde nicht erkannt, bitte versuchen Sie es erneut", - "@biometricNotRecognized": { - "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + "@invalidValue": { + "description": "Error message when the value is not valid for the parameter.", + "placeholders": { + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "biometricSuccess": "Authentifizierung erfolgreich", - "@biometricSuccess": { - "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + "@invalidValueIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsRequiredTitle": "Gerätepasswort ist nicht eingerichtet", - "@deviceCredentialsRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + "@isExpotableQuestion": { + "description": "Label for the question if the token is exportable." }, - "deviceCredentialsSetupDescription": "Setzen Sie bitte ein Gerätepasswort in den Einstellungen", - "@deviceCredentialsSetupDescription": { - "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + "@isPiTokenQuestion": { + "description": "Label for the question if the token is a privacyIDEA token." }, - "signInTitle": "Authentifizierung wird benötigt", - "@signInTitle": { - "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + "@language": { + "description": "Title of language setting group." }, - "goToSettingsButton": "Gehe zu Einstellungen", - "@goToSettingsButton": { - "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + "@legacySigningErrorMessage": { + "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." }, - "goToSettingsDescription": "Authentifizierung durch Gerätepasswort oder Biometrie ist nicht eingerichtet. Bitte aktivieren Sie dies in den Geräteeinstellungen.", - "@goToSettingsDescription": { - "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." + "@legacySigningErrorTitle": { + "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "placeholders": { + "tokenLabel": { + "example": "PUSH1234A" + } + } + }, + "@lightTheme": { + "description": "The light theme." + }, + "@linkedContainer": { + "description": "Label for the linked container serial number." + }, + "@lock": { + "description": "Description of button that locks a token." }, - "lockOut": "Biometrie ist deaktiviert. Bitte sperren und entsperren Sie Ihren Bildschirm um diese zu aktivieren.", "@lockOut": { "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." }, - "authNotSupportedTitle": "Gerätepasswort oder Biometrie wird benötigt", - "@authNotSupportedTitle": { - "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." + "@logMenu": { + "description": "Button to open the log menu." }, - "authNotSupportedBody": "Diese Aktion erfordert, dass auf dem Gerät ein Passwort oder Biometrie eingerichtet ist.", - "@authNotSupportedBody": { - "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." + "@malformedData": { + "description": "Error message when the data is malformed." }, - "lock": "Sperren", - "@lock": { - "description": "Description of button that locks a token." + "@missingRequiredParameter": { + "description": "Error message when a required parameter is missing.", + "placeholders": { + "parameter": { + "example": "counter" + } + } }, - "unlock": "Entsperren", - "@unlock": { - "description": "Description of button that unlocks a token." + "@missingRequiredParameterIn": { + "description": "Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.", + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + } + } }, - "noResultTitle": "Keine Token vorhanden.", - "@noResultTitle": { - "description": "No tokens installed yet." + "@mustNotBeEmpty": { + "placeholders": { + "field": { + "example": "Name" + } + } + }, + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "@noFbToken": { + "description": "Tells the user that there is no Firebase token available." + }, + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." }, - "noResultText1": "Tippe auf das ", "@noResultText1": { "description": "first no result text" }, - "noResultText2": " Icon um loszulegen!", "@noResultText2": { "description": "second no result text" }, - "onBoardingTitle1": "{appName}", + "@noResultTitle": { + "description": "No tokens installed yet." + }, + "@notAnInteger": { + "description": "Tells the user that there is no Firebase token available." + }, + "@notAnNumber": { + "description": "Error message when the user entered a value that is not a number." + }, + "@ok": { + "description": "Button to confirm an action." + }, "@onBoardingTitle1": { "placeholders": { "appName": { @@ -376,282 +364,558 @@ } } }, - "onBoardingText1": "Zwei-Faktor-Authentifizierung\neinfach gemacht", - "onBoardingTitle2": "Maximale Sicherheit", - "onBoardingText2": "Speichern Sie Ihre Token sicher auf diesem Gerät\nGeschützt durch Ihre biometrischen Daten", - "onBoardingTitle3": "Besuchen Sie uns auf Github", - "onBoardingText3": "Diese App ist Open Source", - "errorLogTitle": "Fehlerprotokoll", - "logMenu": "Log-Menü", - "showErrorLog": "Anzeigen", - "clearErrorLog": "Löschen", - "send": "Senden", - "sendErrorLogDescription": "Es wird eine vorgefertigte E-Mail erstellt.\nSie enthält Informationen über die App, den Fehler und das Gerät.\nSie können die E-Mail vor dem Senden bearbeiten.\nWie wir die Informationen verwenden, sehen Sie hier:", - "@sendErrorLogDescription": { - "description": "Explanation for the user what he will send." + "@open": { + "description": "Button to open something." }, - "showPrivacyPolicy": "Datenschutzerklärung anzeigen", - "errorLogEmpty": "Das Fehlerprotokoll ist leer.", - "verboseLogging": "Ausführliche Protokollierung", - "errorLogCleared": "Fehlerprotokoll gelöscht.", - "ok": "Ok", - "errorMailBody": "Die Fehlerprotokolldatei ist angehängt.\nSie können diesen Text durch zusätzliche Informationen über den Fehler ersetzen.", - "@errorMailBody": { - "description": "Message for email body" + "@originApp": { + "description": "Label for the origin app." }, - "showDetails": "Details anzeigen", - "open": "Öffnen", - "sendErrorDialogBody": "Ein unbekannter Fehler ist aufgetreten. Die unten gezeigten Informationen können den Entwicklern per E-Mail zugesendet werden, um zu helfen, diesen Fehler in Zukunft zu vermeiden.", - "@sendErrorDialogBody": { - "description": "Description shown to the user about what info the error report contains." + "@originDetails": { + "description": "Title of the origin details menu." }, - "noFbToken": "Kein Firebase Token vorhanden", - "firebaseToken": "Firebase Token", - "noPublicKey": "Kein öffentlicher Schlüssel vorhanden", - "publicKey": "Öffentlicher Schlüssel", - "editToken": "Token bearbeiten", - "edit": "Bearbeiten", - "save": "Speichern", - "create": "Erstellen", - "validFor": "Gültig für", - "validUntil": "Gültig bis", - "deleteLockedToken": "Bitte authentifizieren Sie sich, um den gesperrten Token zu löschen.", - "editLockedToken": "Bitte authentifizieren Sie sich, um den gesperrten Token zu bearbeiten.", - "expandLockedFolder": "Bitte authentifizieren Sie sich, um den gesperrten Ordner zu öffnen.", - "renameTokenFolder": "Ordner umbenennen", - "addANewFolder": "Neuen Ordner anlegen", - "folderName": "Ordnername", - "retryRollout": "Erneut ausrollen", - "generatingRSAKeyPair": "Generiere RSA Schlüsselpaar", - "@generatingRSAKeyPair": { - "description": "Message for the rollout process" + "@otpValueCopiedMessage": { + "description": "Tells the user that the otp value was copied to the clipboard.", + "placeholders": { + "otpValue": { + "example": "055374" + } + }, + "type": "text" }, - "generatingRSAKeyPairFailed": "Generieren des RSA Schlüsselpaars fehlgeschlagen", - "@generatingRSAKeyPairFailed": { + "@parsingResponse": { "description": "Message for the rollout process" }, - "sendingRSAPublicKey": "Sende öffentlichen RSA Schlüssel", - "@sendingRSAPublicKey": { + "@parsingResponseFailed": { "description": "Message for the rollout process" }, - "sendingRSAPublicKeyFailed": "Senden des öffentlichen RSA Schlüssels fehlgeschlagen", - "@sendingRSAPublicKeyFailed": { - "description": "Message for the rollout process" + "@period": { + "description": "Title of the dropdown button where the period of the totp token is selected." }, - "parsingResponse": "Analysiere Antwort", - "@parsingResponse": { - "description": "Message for the rollout process" + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "parsingResponseFailed": "Analysieren der Antwort fehlgeschlagen", - "rolloutCompleted": "Ausrollen abgeschlossen", - "imageUrl": "Bild URL", - "errorWhenPullingChallenges": "Fehler beim Abrufen der Authentifizierungsanfragen von {name}", - "@errorWhenPullingChallenges": { + "@pleaseEnterANameForThisToken": { + "description": "Hint telling the user to enter a name for a token." + }, + "@pleaseEnterASecretForThisToken": { + "description": "Hint telling the user to enter a secret for a token." + }, + "@pollingChallenges": { + "type": "text" + }, + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", "placeholders": { - "name": { + "serial": { "example": "PUSH1234A" } } }, - "couldNotConnectToServer": "Konnte keine Verbindung zum Server herstellen.", - "errorRollOutNoConnectionToServer": "Der Rollout von Token {name} ist fehlgeschlagen, der Server konnte nicht erreicht werden.", - "authToAcceptPushRequest": "Bitte authentifizieren Sie sich, um die Anfrage anzunehmen.", - "authToDeclinePushRequest": "Bitte authentifizieren Sie sich, um die Anfrage abzulehnen.", - "pushRequestParseError": "Die Push-Anfrage konnte nicht verarbeitet werden.", - "errorRollOutSSLHandshakeFailed": "SSL-Handshake fehlgeschlagen. Roll-out nicht möglich.", - "errorRollOutNotPossibleAnymore": "Das Ausrollen dieses Tokens ist nicht mehr möglich.", - "errorTokenExpired": "Der Token {name} ist abgelaufen.", - "@errorTokenExpired": { + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "@rename": { + "description": "Label that describes renaming the token." + }, + "@renameToken": { + "description": "Title of the dialog where a new name for a token can be entered." + }, + "@renameTokenFolder": { + "description": "Title of the dialog where a new name for a token folder can be entered." + }, + "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { - "name": { - "example": "PUSH1234A" + "account": { + "example": "GitHub" + }, + "issuer": { + "example": "privacyIDEA" } } }, - "yes": "Ja", - "no": "Nein", - "butDiscardIt": "aber verwerfen", - "declineIt": "ablehnen", - "requestTriggerdByUserQuestion": "Wurde diese Anfrage von Ihnen ausgelöst?", - "grantCameraPermissionDialogTitle": "Kamera-Berechtigung erforderlich", - "grantCameraPermissionDialogContent": "Um QR-Codes zu scannen, benötigt die App Zugriff auf die Kamera.", - "grantCameraPermissionDialogPermanentlyDenied": "Sie haben die Berechtigung für den Kamerazugriff permanent verweigert. Bitte aktivieren Sie die Berechtigung in den Einstellungen ihres Smartphones.", - "grantCameraPermissionDialogButton": "Berechtigung erteilen", - "decryptErrorTitle": "Entschlüsselung fehlgeschlagen", - "decryptErrorContent": "Leider konnten Ihre Token nicht entschlüsselt werden. Das deutet darauf hin, dass der Verschlüsselungsschlüssel nicht mehr verfügbar ist. Sie können es erneut versuchen oder die App Daten löschen. Dabei werden alle Token aus der App geschlöscht.", - "decryptErrorButtonDelete": "Löschen.", - "decryptErrorButtonSendError": "Fehler senden", - "decryptErrorButtonRetry": "Wiederholen", - "decryptErrorDeleteConfirmationContent": "Sind Sie sicher, dass Sie die App Daten löschen möchten?", - "hidePushTokens": "Push-Token ausblenden", - "hidePushTokensDescription": "Push-Token aus der Token-Liste ausblenden. Dadurch werden die Token nicht gelöscht und sind weiterhin auf einem separaten Bildschirm sichtbar.", - "settingsGroupGeneral": "Allgemeines", - "licensesAndVersion": "Lizenzen und Version", - "privacyPolicy": "Datenschutzerklärung", - "legacySigningErrorTitle": "Bei der Verwendung des veralteten Tokens ist ein Fehler aufgetreten: {tokenLabel}", - "introScanQrCode": "Sie können QR-Codes scannen, um Token hinzuzufügen.\nWir unterstützen alle gängigen Two-Factor-Authentication Token und auch die privacyIDEA Token.", - "introAddTokenManually": "Wenn Sie keinen QR-Code scannen möchten, können Sie Token auch manuell hinzufügen.", - "introTokenSwipe": "Wischen Sie Token nach links, um die verfügbaren Aktionen zu sehen.", - "introEditToken": "Hier können Sie den Namen des Tokens bearbeiten und einige Details einsehen.", - "introLockToken": "Um die Sicherheit noch weiter zu erhöhen, können Sie Token sperren.\nDer Token kann dann erst nach der Authentifizierung verwendet werden.", - "introDragToken": "Reorganisieren Sie Ihre Token, indem Sie sie einige Sekunden lang drücken und dann an die gewünschte Position ziehen.", - "introAddFolder": "Sie können Ordner erstellen, um Ihre Token zu organisieren.", - "introPollForChallenges": "Sie können neue Push-Anmeldungen abfragen, indem Sie die Liste der Token nach unten ziehen.", - "introHidePushTokens": "Deine Push-Token sind jetzt versteckt.\nAber du kannst sie immer noch auf dem Bildschirm mit den Push-Token sehen.", - "@legacySigningErrorTitle": { - "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "@requestPushChallengesPeriodically": { + "description": "The description of the polling feature." + }, + "@retry": { + "description": "Label for e.g. a button. Something is tried to be done again." + }, + "@rolloutCompleted": { + "description": "Message for the rollout process" + }, + "@scanQrCode": { + "description": "The button to scan otpauth qr-codes." + }, + "@secretIsRequired": { + "description": "Error message when the secret is missing." + }, + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "@send": { + "description": "Button to send the error log." + }, + "@sendErrorDialogBody": { + "description": "Description shown to the user about what info the error report contains." + }, + "@sendErrorLogDescription": { + "description": "Explanation for the user what he will send." + }, + "@sendPushRequestResponseFailed": { + "description": "Error message when the response to a push request could not be sent." + }, + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "@serverNotReachable": { + "description": "Tells the user that the server could not be reached." + }, + "@settings": { + "description": "Button to open the settings page." + }, + "@showDetails": { + "description": "Button to show details." + }, + "@showErrorLog": { + "description": "Button to show the error log." + }, + "@showPrivacyPolicy": { + "description": "Button to show the privacy policy." + }, + "@signInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "@someTokensDoNotSupportPolling": { + "description": "Tells the user, that the following tokens do not support polling.", + "type": "text" + }, + "@startRollout": { + "description": "Label that tells the user that the token is being rolled out." + }, + "@statusCode": { + "description": "Tells the user the status code of the error.", "placeholders": { - "tokenLabel": { - "example": "PUSH1234A" + "statusCode": { + "example": "400" } } }, - "legacySigningErrorMessage": "Der Token wurde in einer veralteten Version der App erstellt, was zu Problemen bei der Verwendung führen kann. Es wird empfohlen, einen neuen Push-Token zu erstellen, wenn das Problem weiterhin besteht!", - "@legacySigningErrorMessage": { - "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." + "@sync": { + "description": "Text of button that is used to synchronize push tokens." }, - "selectImportSource": "Importquelle auswählen", - "selectImportType": "Wie wollen Sie die Token importieren?", - "importTokens": "Token importieren", - "importNTokens": "{count, plural, zero{Keine Token importieren} one{Ein Token importieren} other{{count} Token importieren}}", - "selectFile": "Datei auswählen", - "decrypt": "Entschlüsseln", - "tokensAreEncrypted": "Die Token sind verschlüsselt. Bitte gib das Passwort ein, um sie zu entschlüsseln.", - "tokensNotEncrypted": "Die Token sind unverschlüsselt und können direkt importiert werden.", - "tokensSuccessfullyDecrypted": "Die Token wurden erfolgreich entschlüsselt, sie können nun importiert werden.", - "password": "Passwort", - "wrongPassword": "Falsches Passwort", - "qrScan": "Scannen", - "enterLink": "Link eingeben", - "invalidBackupFile": "Die ausgewählte Datei ist kein gültiges Backup von {appName}.", - "invalidQrScan": "Der gescannte QR-Code ist kein gültiges Backup von {appName}.", - "invalidQrFile": "Die ausgewählte Datei enthällt kein gültigen QR-Code von {appName}.", - "invalidLink": "Der eingegebene Link ist kein gültiger Token von {appName}, oder er wird nicht unterstützt.", - "importFailedToken": "{count, plural, zero{Kein Token konnte nicht importiert werden.} one{Importieren eines Tokens fehlgeschlagen.} other{Der Import von {count} Token ist fehlgeschlagen.}}", - "importExistingToken": "{count, plural, zero{Es wurde kein Token gefunden, das sich bereits in der App befindet.} one{Es wurde ein Token gefunden, das sich bereits in der Anwendung befindet.} other{Es wurden {count} Token gefunden, die sich bereits in der Anwendung befinden.}}", - "importConflictToken": "{count, plural, zero{Es besteht kein Konflikt mit bereits existierenden Token.} one{Es besteht ein Konflikt mit bereits vorhandenen Token.\nBitte wählen Sie aus, welches Sie behalten möchten.} other{Es bestehen Konflikte mit bereits vorhandenen Token.\nBitte wählen Sie die Token aus, die Sie behalten möchten.}}", - "importNewToken": "{count, plural, zero{Es wurde kein neues Token gefunden.} one{Es wurde ein neues Token gefunden, das importiert werden kann} other{Es wurden {count} neue Token gefunden, die importiert werden können.}}", - "importHintPrivacyIdeaQrScan": "Um QR-Codes der Token zu erstellen, navigieren Sie zu den Einstellungen und tippen auf \"Exportieren\". Wählen Sie dann \"Als QR-Code\" und tippen Sie auf den zu exportierenden Token. Diese Variante ist nur für die direkte Übertragung auf ein anderes Gerät geeignet, da der QR-Code nicht verschlüsselt ist.", - "importHintPrivacyIdeaFile": "Um ein Backup zu erstellen, gehen Sie zu den Einstellungen und tippen auf \"Exportieren\". Wählen Sie \"Als Datei\" aus, wählen Sie die Token aus, die Sie exportieren möchten. Anschließend tippen Sie auf \"Exportieren\" und setzen Sie ein Passwort. Der Speicherort ist der Download-Ordner auf Ihrem Gerät.", - "importHint2FAS": "Wählen Sie das 2FAS-Backup aus.\nFalls Sie kein Backup haben, erstellen Sie eins in der 2FAS-App. Wir empfehlen die Verwendung eines Passworts.", - "importHintAegisBackupFile": "Wähle dein Aegis-Export (.json) aus.\nWenn Sie keinen Export haben, erstellen Sie bitte eins über das Einstellungen Menu in der Aegis-App. Wir empfehlen die Verwendung eines Passworts.", - "importHintAegisQrScan": "Scannen Sie den QR-Code, den Sie erhalten, wenn Sie Einträge aus Aegis übertragen.", - "importHintAegisLink": "Geben Sie den Link ein, den Sie erhalten, wenn Sie Einträge aus Aegis übertragen.", - "importHintGoogleQrScan": "Scannen Sie den QR-Code, den Sie erhalten, wenn Sie Ihre Konten aus Google Authenticator exportieren.", - "importHintGoogleQrFile": "Wählen Sie eine Bilddatei mit dem QR-Code, den Sie erhalten, wenn Sie Ihre Konten aus dem Google Authenticator exportieren.\n!! Der QR-Code enthält die Token in unverschlüsselter Form. Es ist deshalb nicht sicher, diesen länger als nötig aufzubewahren !!", - "importHintAuthenticatorProFile": "Um ein Backup der Authenticator Pro-App zu erstellen navigieren Sie zu den Einstellungen und tippen Sie auf \"Automatische Sicherung\". Wählen Sie einen Speicherort und setzen Sie ein Passwort. Anschließend drücken Sie auf \"Jetzt sichern\" um die Token zu exportieren.", - "importHintFreeOtpPlusQrScan": "Scannen Sie den QR-Code, den Sie erhalten, wenn Sie auf die drei Punkte in der Kachel des Tokens drücken, und wählen Sie \"QR-Code teilen\".", - "importHintFreeOtpPlusFile": "Um ein Backup der FreeOTP+ App zu erstellen, tippen Sie auf die drei Punkte in der oberen rechten Ecke und wählen Sie \"Exportieren\". Sie können zwischen dem JSON- und dem URI-Format wählen. Wir empfehlen, das Backup nach dem Importieren zu löschen, da es nicht verschlüsselt ist.", - "qrFileDecodeError": "Es war nicht möglich, den QR-Code aus dem ausgewählten Bild zu dekodieren. Bitte verwenden Sie stattdessen den QR-Code-Scanner.", - "tokenLink": "Token Link", - "feedback": "Feedback", - "feedbackTitle": "Ihr Feedback ist immer willkommen!", - "feedbackDescription": "Wenn Sie Fragen, Anregungen oder Probleme haben, lassen Sie es uns wissen.", - "feedbackHint": "Es öffnet sich eine vorgefertigte E-Mail, die Sie an uns senden können. Falls gewünscht, werden Informationen über Ihr Gerät und die Version der Anwendung hinzugefügt. Vor dem Versenden können Sie die E-Mail überprüfen und bearbeiten.", - "feedbackPrivacyPolicy1": "Mit dem Senden des Feedbacks stimmen Sie unserer ", - "feedbackPrivacyPolicy2": "Datenschutzerklärung", - "@feedbackPrivacyPolicy2": { - "description": "Tapping on this should open the privacy policy." + "@syncContainerFailed": { + "description": "Error message when synchronizing a container failed." }, - "feedbackPrivacyPolicy3": " zu.", - "addSystemInfo": "Systeminfos hinzufügen", - "feedbackSentTitle": "Feedback gesendet", - "feedbackSentDescription": "Vielen Dank für Ihre Hilfe bei der Verbesserung dieser App!", - "patchNotesDialogTitle": "Was ist neu?", - "version": "Version", - "noMailAppTitle": "Keine Mail-App gefunden", - "noMailAppDescription": "Auf diesem Gerät ist keine E-Mail-App installiert oder initialisiert, bitte versuchen Sie es erneut, wenn Sie eine E-Mail-Nachricht senden können.", - "authenticationRequest": "Authentifizierung", - "requestInfo": "Gesendet von {issuer} für Ihr Konto: \"{account}\"", - "@requestInfo": { + "@syncFbTokenFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "@systemTheme": { + "description": "The systems theme." + }, + "@theSecretDoesNotFitTheCurrentEncoding": { + "description": "Hint telling the user that the secret does not fit the selected encoding." + }, + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "@themeMode": { + "description": "Title of the setting group where the theme mode can be changed." + }, + "@timeOut": { + "description": "Error message when a request times out." + }, + "@tokenDataParseError": { + "description": "Error message when the token data could not be parsed." + }, + "@tokenDetails": { + "description": "Title of the token details menu." + }, + "@tokenSerial": { + "description": "Label for the token serial number." + }, + "@tokensDoNotSupportSynchronization": { + "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + }, + "@type": { + "description": "Title of the dropdown button where the type of the token is selected." + }, + "@unexpectedError": { + "description": "Title of page report mode." + }, + "@unknown": { + "description": "Tells that something is unknown." + }, + "@unlock": { + "description": "Description of button that unlocks a token." + }, + "@unsupported": { "placeholders": { - "issuer": { - "example": "privacyIDEA" + "name": { + "example": "piauth version" }, - "Konto": { - "example": "GitHub" + "value": { + "example": "5" } } }, - "errorUnlinkingPushToken": "Entkoppeln des Push Tokens {label} fehlgeschlagen.", - "@errorUnlinkingPushToken": { - "description": "Error message when unlinking a push token failed.", - "placeholders": { - "label": { - "example": "PUSH1234A" - } - } + "@useDeviceLocaleDescription": { + "description": "Description of the switch tile where using the devices language can be enabled." }, - "pleaseSyncManuallyWhenNetworkIsAvailable": "Bitte synchronisieren Sie die Push Token über die Einstellungen manuell, wenn eine Netzwerkverbindung verfügbar ist.", - "pushTokens": "Push-Token", - "continueButton": "Weiter", - "addTokenManually": "Token manuell hinzufügen", - "addFolder": "Ordner hinzufügen", - "searchTokens": "Token suchen", - "closeSearchTokens": "Suche schließen", - "increaseCounter": "Zähler erhöhen", - "copyOTPToClipboard": "OTP in die Zwischenablage kopieren", - "licenses": "Lizenzen", - "optionalMessage": "Optionale Nachricht", - "confirmation": "Confirmation", - "askLogSendedDescription": "Haben Sie das Protokoll gesendet, und möchten Sie es jetzt löschen?", - "algorithmUnsupported": "Der Algorithmus {algorithm} wird nicht unterstützt", - "@algorithmUnsupported": { + "@useDeviceLocaleTitle": { + "description": "Title of the switch tile where using the devices language can be enabled." + }, + "@valueNotAllowed": { "placeholders": { - "algorithm": { - "example": "MD5" + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "thisAppIsOpenSource": "Diese App ist Open Source\nBesuchen Sie uns auf GitHub", - "invalidArgument": "{argument} ist kein gültiger Wert für {type}", - "importExportTokens": "Token importieren/exportieren", - "exportNonPrivacyIDEATokens": "Nicht-privacyIDEA-Token exportieren", - "selectTokensToExport": "{count, plural, zero{} one{Wählen Sie das zu exportierende Token aus} other{Wählen Sie die zu exportierenden Tokens aus}}", - "noTokenToExport": "Kein Token zum Exportieren verfügbar", - "exportAllTokens": "Alle Tokens exportieren", - "export": "Exportieren", - "exportingTokens": "Tokens werden exportiert...", - "exportTokens": "Tokens exportieren", - "enterPasswordToEncrypt": "Geben Sie ein Passwort ein, um die Tokens zu verschlüsseln. Dieses Passwort wird benötigt, um die Tokens zu importieren.", - "exportLockedTokenReason": "Bitte authentifizieren Sie sich, um gesperrte Tokens zu exportieren.", - "fileSavedToDownloadsFolder": "Datei wurde im Download-Ordner gespeichert", - "errorSavingFile": "Fehler beim Speichern der Datei", - "asQrCode": "Als QR-Code", - "asFile": "Als Datei", - "scanThisQrWithNewDevice": "Scannen Sie diesen QR-Code mit Ihrem neuen Gerät, um das Token zu importieren.", - "oneMore": "Noch eins", - "done": "Fertig", - "confirmPassword": "Passwort bestätigen", - "exampleUrl": "Bitte geben Sie eine gültige URL ein wie: \"https://example.com\"", - "pushEndpointUrl": "Push-Endpunkt URL", - "mustNotBeEmpty": "{field} darf nicht leer sein", - "@mustNotBeEmpty": { + "@valueNotAllowedIn": { "placeholders": { - "field": { - "example": "Name" + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "sendPushRequestResponseFailed": "Senden der Antwort fehlgeschlagen.", - "@sendPushRequestResponseFailed": { - "description": "Error message when the response to a push request could not be sent." + "@verboseLogging": { + "description": "Title of the switch tile where verbose logging can be enabled." }, - "passwordCannotBeEmpty": "Das Passwort darf nicht leer sein", - "passwordMustBeAtLeast8Characters": "Das Passwort muss mindestens 8 Zeichen lang sein", - "passwordCannotContainWhitespace": "Das Passwort darf keine Leerzeichen enthalten", - "passwordMustContainLowercaseLetter": "Das Passwort muss einen Kleinbuchstaben enthalten", - "passwordMustContainUppercaseLetter": "Das Passwort muss einen Großbuchstaben enthalten", - "passwordMustContainNumber": "Das Passwort muss eine Zahl enthalten", - "passwordMustContainSpecialCharacter": "Das Passwort muss ein Sonderzeichen enthalten", - "passwordsDoNotMatch": "Die Passwörter stimmen nicht überein", - "selectTokensToExportHelpTitle": "Ist Ihr Token nicht aufgelistet?", - "selectTokensToExportHelpContent": "Wenn ein Token nicht aufgelistet ist, ist nicht garantiert, dass es sich nicht um ein privacyIDEA-Token handelt.\nZurzeit können nur manuell hinzugefügte und importierte Token exportiert werden.", + "accept": "Akzeptieren", + "addANewFolder": "Neuen Ordner anlegen", + "addFolder": "Ordner hinzufügen", + "addSystemInfo": "Systeminfos hinzufügen", + "addToken": "Token hinzufügen", + "addTokenManually": "Token manuell hinzufügen", + "algorithm": "Algorithmus", + "algorithmUnsupported": "Der Algorithmus {algorithm} wird nicht unterstützt", + "allTokensSynchronized": "Alle Token wurden synchronisiert.", + "asFile": "Als Datei", + "asQrCode": "Als QR-Code", + "askLogSendedDescription": "Haben Sie das Protokoll gesendet, und möchten Sie es jetzt löschen?", + "authNotSupportedBody": "Diese Aktion erfordert, dass auf dem Gerät ein Passwort oder Biometrie eingerichtet ist.", + "authNotSupportedTitle": "Gerätepasswort oder Biometrie wird benötigt", + "authToAcceptPushRequest": "Bitte authentifizieren Sie sich, um die Anfrage anzunehmen.", + "authToDeclinePushRequest": "Bitte authentifizieren Sie sich, um die Anfrage abzulehnen.", + "authenticateToShowOtp": "Bitte authentifizieren Sie sich, um das Einmalpasswort anzuzeigen.", + "authenticateToUnLockToken": "Bitte authentifizieren Sie sich, um den Sperrstatus des Tokens zu ändern.", + "authenticationRequest": "Authentifizierung", + "biometricHint": "Authentifizierung wird benötigt", + "biometricNotRecognized": "Biometrie wurde nicht erkannt, bitte versuchen Sie es erneut", + "biometricRequiredTitle": "Biometrie ist nicht eingerichtet", + "biometricSuccess": "Authentifizierung erfolgreich", + "butDiscardIt": "aber verwerfen", + "cancel": "Abbrechen", + "checkServerCertificate": "Bitte überprüfen Sie das Serverzertifikat", + "checkYourNetwork": "Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.", + "clearErrorLog": "Löschen", + "closeSearchTokens": "Suche schließen", + "confirmDeletion": "Löschen bestätigen", + "confirmDeletionOf": "Sind Sie sicher dass Sie {name} löschen möchten?", + "confirmFolderDeletionHint": "Das Löschen eines Ordners hat keine Auswirkungen auf die Token, die sich darin befinden.\nDie Token werden in die Hauptliste verschoben.", + "confirmPassword": "Passwort bestätigen", + "confirmTokenDeletionHint": "Unter Umständen können Sie sich nicht mehr einloggen, wenn Sie diesen Token löschen.\nBitte stellen Sie sicher, dass Sie sich ohne diesen Token in den dazugehörigen Account einloggen können.", + "confirmation": "Confirmation", + "connectionFailed": "Verbindung fehlgeschlagen.", + "container": "Container", + "continueButton": "Weiter", + "copyOTPToClipboard": "OTP in die Zwischenablage kopieren", + "couldNotConnectToServer": "Konnte keine Verbindung zum Server herstellen.", + "couldNotSignMessage": "Nachricht konnte nicht signiert werden.", + "counter": "Zähler", + "create": "Erstellen", + "createdAt": "Erstellt am", + "creator": "Ersteller", + "decline": "Ablehnen", + "declineIt": "ablehnen", + "decrypt": "Entschlüsseln", + "decryptErrorButtonDelete": "Löschen.", + "decryptErrorButtonRetry": "Wiederholen", + "decryptErrorButtonSendError": "Fehler senden", + "decryptErrorContent": "Leider konnten Ihre Token nicht entschlüsselt werden. Das deutet darauf hin, dass der Verschlüsselungsschlüssel nicht mehr verfügbar ist. Sie können es erneut versuchen oder die App Daten löschen. Dabei werden alle Token aus der App geschlöscht.", + "decryptErrorDeleteConfirmationContent": "Sind Sie sicher, dass Sie die App Daten löschen möchten?", + "decryptErrorTitle": "Entschlüsselung fehlgeschlagen", + "delete": "Löschen", + "deleteLockedToken": "Bitte authentifizieren Sie sich, um den gesperrten Token zu löschen.", + "deviceCredentialsRequiredTitle": "Gerätepasswort ist nicht eingerichtet", + "deviceCredentialsSetupDescription": "Setzen Sie bitte ein Gerätepasswort in den Einstellungen", + "digits": "Ziffern", + "dismiss": "Schließen", + "done": "Fertig", + "edit": "Bearbeiten", + "editLockedToken": "Bitte authentifizieren Sie sich, um den gesperrten Token zu bearbeiten.", + "editToken": "Token bearbeiten", + "enablePolling": "Aktives Stellen von Push-Anfragen", + "encoding": "Kodierung", + "enterDetailsForToken": "Neuen Token konfigurieren", + "enterLink": "Link eingeben", + "enterPasswordToEncrypt": "Geben Sie ein Passwort ein, um die Tokens zu verschlüsseln. Dieses Passwort wird benötigt, um die Tokens zu importieren.", + "errorLogCleared": "Fehlerprotokoll gelöscht.", + "errorLogEmpty": "Das Fehlerprotokoll ist leer.", + "errorLogTitle": "Fehlerprotokoll", + "errorMailBody": "Die Fehlerprotokolldatei ist angehängt.\nSie können diesen Text durch zusätzliche Informationen über den Fehler ersetzen.", + "errorRollOutFailed": "Ausrollen von {name} ist fehlgeschlagen.", + "errorRollOutNoConnectionToServer": "Der Rollout von Token {name} ist fehlgeschlagen, der Server konnte nicht erreicht werden.", + "errorRollOutNotPossibleAnymore": "Das Ausrollen dieses Tokens ist nicht mehr möglich.", + "errorRollOutSSLHandshakeFailed": "SSL-Handshake fehlgeschlagen. Roll-out nicht möglich.", + "errorRollOutUnknownError": "Ein unbekannter Fehler ist aufgetreten. Aurollen nicht möglich: {e}", + "errorSavingFile": "Fehler beim Speichern der Datei", + "errorSynchronizationNoNetworkConnection": "Die Synchronisation ist fehlgeschlagen, da der privacyIDEA Server nicht erreicht werden konnte.", + "errorTokenExpired": "Der Token {name} ist abgelaufen.", + "errorUnlinkingPushToken": "Entkoppeln des Push Tokens {label} fehlgeschlagen.", + "errorWhenPullingChallenges": "Fehler beim Abrufen der Authentifizierungsanfragen von {name}", + "exampleUrl": "Bitte geben Sie eine gültige URL ein wie: \"https://example.com\"", + "expandLockedFolder": "Bitte authentifizieren Sie sich, um den gesperrten Ordner zu öffnen.", + "export": "Exportieren", + "exportAllTokens": "Alle Tokens exportieren", + "exportLockedTokenReason": "Bitte authentifizieren Sie sich, um gesperrte Tokens zu exportieren.", + "exportNonPrivacyIDEATokens": "Nicht-privacyIDEA-Token exportieren", + "exportTokens": "Tokens exportieren", + "exportingTokens": "Tokens werden exportiert...", + "failedToLoad": "Fehlgeschlagen zu laden: ", + "feedback": "Feedback", + "feedbackDescription": "Wenn Sie Fragen, Anregungen oder Probleme haben, lassen Sie es uns wissen.", + "feedbackHint": "Es öffnet sich eine vorgefertigte E-Mail, die Sie an uns senden können. Falls gewünscht, werden Informationen über Ihr Gerät und die Version der Anwendung hinzugefügt. Vor dem Versenden können Sie die E-Mail überprüfen und bearbeiten.", + "feedbackPrivacyPolicy1": "Mit dem Senden des Feedbacks stimmen Sie unserer ", + "feedbackPrivacyPolicy2": "Datenschutzerklärung", + "feedbackPrivacyPolicy3": " zu.", + "feedbackSentDescription": "Vielen Dank für Ihre Hilfe bei der Verbesserung dieser App!", + "feedbackSentTitle": "Feedback gesendet", + "feedbackTitle": "Ihr Feedback ist immer willkommen!", + "fileSavedToDownloadsFolder": "Datei wurde im Download-Ordner gespeichert", "findingQrCodeInImage": "Suche nach QR-Code im Bild...", - "qrNotFound": "Kein QR-Code gefunden!", + "firebaseToken": "Firebase Token", + "folderName": "Ordnername", + "generatingPhonePart": "Generiere Telefonanteil", + "generatingRSAKeyPair": "Generiere RSA Schlüsselpaar", + "generatingRSAKeyPairFailed": "Generieren des RSA Schlüsselpaars fehlgeschlagen", + "goToSettingsButton": "Gehe zu Einstellungen", + "goToSettingsDescription": "Authentifizierung durch Gerätepasswort oder Biometrie ist nicht eingerichtet. Bitte aktivieren Sie dies in den Geräteeinstellungen.", + "grantCameraPermissionDialogButton": "Berechtigung erteilen", + "grantCameraPermissionDialogContent": "Um QR-Codes zu scannen, benötigt die App Zugriff auf die Kamera.", + "grantCameraPermissionDialogPermanentlyDenied": "Sie haben die Berechtigung für den Kamerazugriff permanent verweigert. Bitte aktivieren Sie die Berechtigung in den Einstellungen ihres Smartphones.", + "grantCameraPermissionDialogTitle": "Kamera-Berechtigung erforderlich", + "handshakeFailed": "Handshake fehlgeschlagen", + "hidePushTokens": "Push-Token ausblenden", + "hidePushTokensDescription": "Push-Token aus der Token-Liste ausblenden. Dadurch werden die Token nicht gelöscht und sind weiterhin auf einem separaten Bildschirm sichtbar.", + "imageUrl": "Bild URL", + "importConflictToken": "{count, plural, zero{Es besteht kein Konflikt mit bereits existierenden Token.} one{Es besteht ein Konflikt mit bereits vorhandenen Token.\nBitte wählen Sie aus, welches Sie behalten möchten.} other{Es bestehen Konflikte mit bereits vorhandenen Token.\nBitte wählen Sie die Token aus, die Sie behalten möchten.}}", + "importExistingToken": "{count, plural, zero{Es wurde kein Token gefunden, das sich bereits in der App befindet.} one{Es wurde ein Token gefunden, das sich bereits in der Anwendung befindet.} other{Es wurden {count} Token gefunden, die sich bereits in der Anwendung befinden.}}", + "importExportTokens": "Token importieren/exportieren", + "importFailedToken": "{count, plural, zero{Kein Token konnte nicht importiert werden.} one{Importieren eines Tokens fehlgeschlagen.} other{Der Import von {count} Token ist fehlgeschlagen.}}", + "importHint2FAS": "Wählen Sie das 2FAS-Backup aus.\nFalls Sie kein Backup haben, erstellen Sie eins in der 2FAS-App. Wir empfehlen die Verwendung eines Passworts.", + "importHintAegisBackupFile": "Wähle dein Aegis-Export (.json) aus.\nWenn Sie keinen Export haben, erstellen Sie bitte eins über das Einstellungen Menu in der Aegis-App. Wir empfehlen die Verwendung eines Passworts.", + "importHintAegisLink": "Geben Sie den Link ein, den Sie erhalten, wenn Sie Einträge aus Aegis übertragen.", + "importHintAegisQrScan": "Scannen Sie den QR-Code, den Sie erhalten, wenn Sie Einträge aus Aegis übertragen.", + "importHintAuthenticatorProFile": "Um ein Backup der Authenticator Pro-App zu erstellen navigieren Sie zu den Einstellungen und tippen Sie auf \"Automatische Sicherung\". Wählen Sie einen Speicherort und setzen Sie ein Passwort. Anschließend drücken Sie auf \"Jetzt sichern\" um die Token zu exportieren.", + "importHintFreeOtpPlusFile": "Um ein Backup der FreeOTP+ App zu erstellen, tippen Sie auf die drei Punkte in der oberen rechten Ecke und wählen Sie \"Exportieren\". Sie können zwischen dem JSON- und dem URI-Format wählen. Wir empfehlen, das Backup nach dem Importieren zu löschen, da es nicht verschlüsselt ist.", + "importHintFreeOtpPlusQrScan": "Scannen Sie den QR-Code, den Sie erhalten, wenn Sie auf die drei Punkte in der Kachel des Tokens drücken, und wählen Sie \"QR-Code teilen\".", + "importHintGoogleQrFile": "Wählen Sie eine Bilddatei mit dem QR-Code, den Sie erhalten, wenn Sie Ihre Konten aus dem Google Authenticator exportieren.\n!! Der QR-Code enthält die Token in unverschlüsselter Form. Es ist deshalb nicht sicher, diesen länger als nötig aufzubewahren !!", + "importHintGoogleQrScan": "Scannen Sie den QR-Code, den Sie erhalten, wenn Sie Ihre Konten aus Google Authenticator exportieren.", + "importHintPrivacyIdeaFile": "Um ein Backup zu erstellen, gehen Sie zu den Einstellungen und tippen auf \"Exportieren\". Wählen Sie \"Als Datei\" aus, wählen Sie die Token aus, die Sie exportieren möchten. Anschließend tippen Sie auf \"Exportieren\" und setzen Sie ein Passwort. Der Speicherort ist der Download-Ordner auf Ihrem Gerät.", + "importHintPrivacyIdeaQrScan": "Um QR-Codes der Token zu erstellen, navigieren Sie zu den Einstellungen und tippen auf \"Exportieren\". Wählen Sie dann \"Als QR-Code\" und tippen Sie auf den zu exportierenden Token. Diese Variante ist nur für die direkte Übertragung auf ein anderes Gerät geeignet, da der QR-Code nicht verschlüsselt ist.", + "importNTokens": "{count, plural, zero{Keine Token importieren} one{Ein Token importieren} other{{count} Token importieren}}", + "importNewToken": "{count, plural, zero{Es wurde kein neues Token gefunden.} one{Es wurde ein neues Token gefunden, das importiert werden kann} other{Es wurden {count} neue Token gefunden, die importiert werden können.}}", + "importTokens": "Token importieren", + "importedVia": "Importiert über", + "increaseCounter": "Zähler erhöhen", + "internalServerError": "Interner Serverfehler ({code})", + "introAddFolder": "Sie können Ordner erstellen, um Ihre Token zu organisieren.", + "introAddTokenManually": "Wenn Sie keinen QR-Code scannen möchten, können Sie Token auch manuell hinzufügen.", + "introDragToken": "Reorganisieren Sie Ihre Token, indem Sie sie einige Sekunden lang drücken und dann an die gewünschte Position ziehen.", + "introEditToken": "Hier können Sie den Namen des Tokens bearbeiten und einige Details einsehen.", + "introHidePushTokens": "Deine Push-Token sind jetzt versteckt.\nAber du kannst sie immer noch auf dem Bildschirm mit den Push-Token sehen.", + "introLockToken": "Um die Sicherheit noch weiter zu erhöhen, können Sie Token sperren.\nDer Token kann dann erst nach der Authentifizierung verwendet werden.", + "introPollForChallenges": "Sie können neue Push-Anmeldungen abfragen, indem Sie die Liste der Token nach unten ziehen.", + "introScanQrCode": "Sie können QR-Codes scannen, um Token hinzuzufügen.\nWir unterstützen alle gängigen Two-Factor-Authentication Token und auch die privacyIDEA Token.", + "introTokenSwipe": "Wischen Sie Token nach links, um die verfügbaren Aktionen zu sehen.", + "invalidBackupFile": "Die ausgewählte Datei ist kein gültiges Backup von {appName}.", + "invalidLink": "Der eingegebene Link ist kein gültiger Token von {appName}, oder er wird nicht unterstützt.", + "invalidQrFile": "Die ausgewählte Datei enthällt kein gültigen QR-Code von {appName}.", + "invalidQrScan": "Der gescannte QR-Code ist kein gültiges Backup von {appName}.", + "invalidValue": "untranslated", + "invalidValueIn": "untranslated", + "isExpotableQuestion": "Ist exportierbar?", + "isPiTokenQuestion": "Ist ein privacyIDEA-Token?", + "language": "Sprache", + "legacySigningErrorMessage": "Der Token wurde in einer veralteten Version der App erstellt, was zu Problemen bei der Verwendung führen kann. Es wird empfohlen, einen neuen Push-Token zu erstellen, wenn das Problem weiterhin besteht!", + "legacySigningErrorTitle": "Bei der Verwendung des veralteten Tokens ist ein Fehler aufgetreten: {tokenLabel}", + "licenses": "Lizenzen", + "licensesAndVersion": "Lizenzen und Version", + "linkedContainer": "Verknüpfter Container", + "lock": "Sperren", + "lockOut": "Biometrie ist deaktiviert. Bitte sperren und entsperren Sie Ihren Bildschirm um diese zu aktivieren.", + "logMenu": "Log-Menü", + "malformedData": "Fehlerhafte Daten", + "markQrCode": "QR-Code markieren", + "missingRequiredParameter": "Der Wert für den Parameter [{parameter}] ist erforderlich, fehlt aber.", + "missingRequiredParameterIn": "Der Wert für den Parameter [{parameter}] ist erforderlich, fehlt aber in \"{map}\".", + "mustNotBeEmpty": "{field} darf nicht leer sein", + "name": "Name", + "no": "Nein", + "noFbToken": "Kein Firebase Token vorhanden", + "noMailAppDescription": "Auf diesem Gerät ist keine E-Mail-App installiert oder initialisiert, bitte versuchen Sie es erneut, wenn Sie eine E-Mail-Nachricht senden können.", + "noMailAppTitle": "Keine Mail-App gefunden", + "noNetworkConnection": "Keine Netzwerkverbindung.", + "noPublicKey": "Kein öffentlicher Schlüssel vorhanden", + "noResultText1": "Tippe auf das ", + "noResultText2": " Icon um loszulegen!", + "noResultTitle": "Keine Token vorhanden.", + "noTokenToExport": "Kein Token zum Exportieren verfügbar", + "notAnInteger": "Der Wert ist keine Ganzzahl.", + "notAnNumber": "Der Wert ist keine Zahl.", + "ok": "Ok", + "oneMore": "Noch eins", + "open": "Öffnen", + "optionalMessage": "Optionale Nachricht", + "originApp": "Ursprungs-App", + "originDetails": "Angaben zur Herkunft", + "otpValueCopiedMessage": "Passwort \"{otpValue}\" wurde in Zwischenablage kopiert.", + "parsingResponse": "Analysiere Antwort", + "parsingResponseFailed": "Analysieren der Antwort fehlgeschlagen", + "password": "Passwort", + "passwordCannotBeEmpty": "Das Passwort darf nicht leer sein", + "passwordCannotContainWhitespace": "Das Passwort darf keine Leerzeichen enthalten", + "passwordMustBeAtLeast8Characters": "Das Passwort muss mindestens 8 Zeichen lang sein", + "passwordMustContainLowercaseLetter": "Das Passwort muss einen Kleinbuchstaben enthalten", + "passwordMustContainNumber": "Das Passwort muss eine Zahl enthalten", + "passwordMustContainSpecialCharacter": "Das Passwort muss ein Sonderzeichen enthalten", + "passwordMustContainUppercaseLetter": "Das Passwort muss einen Großbuchstaben enthalten", + "passwordsDoNotMatch": "Die Passwörter stimmen nicht überein", + "patchNotesBugFixes": "Fehlerbehebungen", + "patchNotesDialogTitle": "Was ist neu?", + "patchNotesImprovements": "Verbesserungen", + "patchNotesNewFeatures": "Neue Funktionen", + "patchNotesV4_3_0NewFeatures1": "Unterstützung für den Import von Token von Google, Aegis und 2FAS Authenticator hinzugefügt. Weitere Importquellen werden in Zukunft hinzugefügt.", + "patchNotesV4_3_0NewFeatures2": "Feedback-Option zu den Einstellungen hinzugefügt.", + "patchNotesV4_3_0NewFeatures3": "Push-Token können jetzt aus der Token-Liste ausgeblendet werden.", + "patchNotesV4_3_0NewFeatures4": "Es wurden Einführungen hinzugefügt, um neuen Benutzern den Einstieg zu erleichtern.", + "patchNotesV4_3_0NewFeatures5": "Sie können jetzt nach Token suchen, indem Sie auf die Lupe in der oberen rechten Ecke tippen.", + "patchNotesV4_3_0NewFeatures6": "Ab Android 12 kann für einen Token ein Widget auf dem Homescreen erstellt werden.", + "patchNotesV4_3_1BugFix1": "Ein Problem wurde behoben, bei dem der otp-Wert nach der Authentifizierung auf einigen Geräten nicht angezeigt wurde.", + "patchNotesV4_3_1Improvement1": "Der QR-Code-Scanner wurde verbessert.", + "patchNotesV4_4_0Improvement1": "Es wurden weitere Importquellen hinzugefügt.", + "patchNotesV4_4_0Improvement2": "Die erkennung von QR-Codes aus Bilddateien wurde verbessert.", + "patchNotesV4_4_0NewFeatures1": "Es ist nun möglich, Token zu exportieren, bei denen sichergestellt werden kann, dass es sich nicht um privacyIDEA Token handelt. Derzeit kann nicht ausgeschlossen werden, dass über den QR-Code-Scanner hinzugefügte Token von privacyIDEA stammen. Die Differenzierung wird in zukünftigen Versionen verbessert.", + "patchNotesV4_4_0NewFeatures2": "Unterstützung für privacyIDEA's \"require presence\" hinzugefügt.", + "period": "Periode", + "phonePart": "Telefonanteil:", + "pleaseEnterANameForThisToken": "Bitte geben Sie einen Namen ein.", + "pleaseEnterASecretForThisToken": "Bitte geben Sie ein Geheimnis ein.", + "pleaseSyncManuallyWhenNetworkIsAvailable": "Bitte synchronisieren Sie die Push Token über die Einstellungen manuell, wenn eine Netzwerkverbindung verfügbar ist.", + "pollingChallenges": "Frage ausstehende Authentifizierungsanfragen ab", + "pollingFailed": "Abfrage fehlgeschlagen.", + "pollingFailedFor": "Abfrage für {serial} fehlgeschlagen.", + "privacyPolicy": "Datenschutzerklärung", + "publicKey": "Öffentlicher Schlüssel", + "pushEndpointUrl": "Push-Endpunkt URL", + "pushRequestParseError": "Die Push-Anfrage konnte nicht verarbeitet werden.", + "pushToken": "Push Token", + "pushTokens": "Push-Token", + "qrFileDecodeError": "Es war nicht möglich, den QR-Code aus dem ausgewählten Bild zu dekodieren. Bitte verwenden Sie stattdessen den QR-Code-Scanner.", "qrInFileNotFound": "Es wurde kein QR-Code in dem ausgewählten Bild gefunden.", "qrInFileNotFound2": "Sie können mir zeigen, wo sich der QR-Code befindet.", "qrInFileNotFound3": "Ich erwarte, dass ich den Code finde, wenn er sich in der Mitte des markierten Bereichs befindet.", - "markQrCode": "QR-Code markieren", - "malformedData": "Fehlerhafte Daten" + "qrNotFound": "Kein QR-Code gefunden!", + "qrScan": "Scannen", + "rename": "Umbenennen", + "renameToken": "Token umbenennen", + "renameTokenFolder": "Ordner umbenennen", + "requestInfo": "Gesendet von {issuer} für Ihr Konto: \"{account}\"", + "requestPushChallengesPeriodically": "Fordert regelmäßig Push-Anfragen vom Server an. Aktivieren Sie diese Funktion, wenn Nachrichten ansonsten nicht erhalten werden.", + "requestTriggerdByUserQuestion": "Wurde diese Anfrage von Ihnen ausgelöst?", + "retry": "Erneut versuchen", + "retryRollout": "Erneut ausrollen", + "rolloutCompleted": "Ausrollen abgeschlossen", + "save": "Speichern", + "scanQrCode": "QR-Code scannen", + "scanThisQrWithNewDevice": "Scannen Sie diesen QR-Code mit Ihrem neuen Gerät, um das Token zu importieren.", + "searchTokens": "Token suchen", + "secretIsRequired": "Secret ist erforderlich", + "secretKey": "Geheimer Schlüssel", + "selectFile": "Datei auswählen", + "selectImportSource": "Importquelle auswählen", + "selectImportType": "Wie wollen Sie die Token importieren?", + "selectTokensToExport": "{count, plural, zero{} one{Wählen Sie das zu exportierende Token aus} other{Wählen Sie die zu exportierenden Tokens aus}}", + "selectTokensToExportHelpContent": "Wenn ein Token nicht aufgelistet ist, ist nicht garantiert, dass es sich nicht um ein privacyIDEA-Token handelt.\nZurzeit können nur manuell hinzugefügte und importierte Token exportiert werden.", + "selectTokensToExportHelpTitle": "Ist Ihr Token nicht aufgelistet?", + "send": "Senden", + "sendErrorDialogBody": "Ein unbekannter Fehler ist aufgetreten. Die unten gezeigten Informationen können den Entwicklern per E-Mail zugesendet werden, um zu helfen, diesen Fehler in Zukunft zu vermeiden.", + "sendErrorLogDescription": "Es wird eine vorgefertigte E-Mail erstellt.\nSie enthält Informationen über die App, den Fehler und das Gerät.\nSie können die E-Mail vor dem Senden bearbeiten.\nWie wir die Informationen verwenden, sehen Sie hier:", + "sendPushRequestResponseFailed": "Senden der Antwort fehlgeschlagen.", + "sendingRSAPublicKey": "Sende öffentlichen RSA Schlüssel", + "sendingRSAPublicKeyFailed": "Senden des öffentlichen RSA Schlüssels fehlgeschlagen", + "serverNotReachable": "Der Server konnte nicht erreicht werden.", + "settings": "Einstellungen", + "settingsGroupGeneral": "Allgemeines", + "showDetails": "Details anzeigen", + "showErrorLog": "Anzeigen", + "showPrivacyPolicy": "Datenschutzerklärung anzeigen", + "signInTitle": "Authentifizierung wird benötigt", + "someTokensDoNotSupportPolling": "Einige der Token sind veraltet und unterstützen keine aktiven Anfragen", + "startRollout": "Starte Rollout", + "statusCode": "Statuscode: {statusCode}", + "sync": "Sync", + "syncContainerFailed": "Container synchronisation fehlgeschlagen", + "syncFbTokenFailed": "Synchronisation ist für die folgenden Token fehlgeschlagen:", + "synchronizePushTokens": "Synchronisiere Push Token", + "synchronizesTokensWithServer": "Synchronisiert Token mit dem privacyIDEA Server.", + "synchronizingTokens": "Synchronisiere Token.", + "theSecretDoesNotFitTheCurrentEncoding": "Das Geheimnis entspricht nicht der gewählten Verschlüsselung.", + "themeMode": "Farbschema", + "thisAppIsOpenSource": "Diese App ist Open Source\nBesuchen Sie uns auf GitHub", + "timeOut": "Zeitlimit", + "tokenDataParseError": "Token-Daten konnten nicht geparst werden", + "tokenDetails": "Tokendetails", + "tokenLink": "Token Link", + "tokenSerial": "Token serial", + "tokensAreEncrypted": "Die Token sind verschlüsselt. Bitte gib das Passwort ein, um sie zu entschlüsseln.", + "tokensDoNotSupportSynchronization": "Die folgenden Token unterstützen keine Synchronisation und müssen erneut ausgerollt werden:", + "tokensNotEncrypted": "Die Token sind unverschlüsselt und können direkt importiert werden.", + "tokensSuccessfullyDecrypted": "Die Token wurden erfolgreich entschlüsselt, sie können nun importiert werden.", + "type": "Art", + "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten.", + "unknown": "Unbekannt", + "unlock": "Entsperren", + "unsupported": "Der {name} [{value}] wird von dieser Version der App nicht unterstützt.", + "useDeviceLocaleDescription": "Nutze Systemsprache, falls diese unterstützt wird. Anderenfalls nutze Englisch. ", + "useDeviceLocaleTitle": "Nutze Systemsprache", + "validFor": "Gültig für", + "validUntil": "Gültig bis", + "valueNotAllowed": "untranslated", + "valueNotAllowedIn": "untranslated", + "verboseLogging": "Ausführliche Protokollierung", + "version": "Version", + "wrongPassword": "Falsches Passwort", + "yes": "Ja" } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 81d411bec..a384d7367 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -1,385 +1,362 @@ { - "@@last_modified": "2023-08-07", - "patchNotesNewFeatures": "New features", - "patchNotesImprovements": "Improvements", - "patchNotesBugFixes": "Bug fixes", - "patchNotesV4_4_0NewFeatures1": "It is now possible to export tokens where it can be ensured that they are not privacyIDEA tokens. Currently, it cannot be ruled out that tokens added via the QR code scanner originate from privacyIDEA. The differentiation will be improved in future versions.", - "patchNotesV4_4_0NewFeatures2": "Added support for privacyIDEA's \"require presence\"", - "patchNotesV4_4_0Improvement1": "Further import sources have been added.", - "patchNotesV4_4_0Improvement2": "Improved recognition of QR codes from image files.", - "patchNotesV4_3_1BugFix1": "Fixed an issue where the otp value was not displayed after authentication on some devices.", - "patchNotesV4_3_1Improvement1": "Improved the qr code scanner.", - "patchNotesV4_3_0NewFeatures1": "Support for importing tokens from Google, Aegis and 2FAS Authenticator has been added. More import sources will be added in the future.", - "patchNotesV4_3_0NewFeatures2": "Added feedback option to the settings.", - "patchNotesV4_3_0NewFeatures3": "Push tokens can now be hidden from the token list.", - "patchNotesV4_3_0NewFeatures4": "Introductions have been added to help new users get started.", - "patchNotesV4_3_0NewFeatures5": "You can now search for tokens by tapping the magnifying glass in the upper right corner.", - "patchNotesV4_3_0NewFeatures6": "Added HomeWidget token for Android 12 and later.", - "accept": "Accept", + "@@last_modified": "2024-09-20", + "@@locale": "en", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." }, - "decline": "Decline", - "@decline": { - "description": "Label for e.g. a button. Something gets declined by the user." - }, - "name": "Name", - "@name": { - "description": "Describes the field where the tokens name should be entered." - }, - "secretKey": "Secret key", - "@secretKey": { - "description": "Describes the field where the tokens secret should be entered." - }, - "counter": "Counter", - "@counter": { - "description": "Describes the field where the tokens counter should be entered." - }, - "encoding": "Encoding", - "@encoding": { - "description": "Title of the dropdown button where the encoding is selected." + "@addToken": { + "description": "The button to open the screen to add tokens by hand." }, - "algorithm": "Algorithm", "@algorithm": { "description": "Title of the dropdown button where the encoding is selected." }, - "digits": "Digits", - "@digits": { - "description": "Title of the dropdown button where the number of digits for the opt value is selected." + "@algorithmUnsupported": { + "placeholders": { + "algorithm": { + "example": "MD5" + } + } }, - "type": "Type", - "@type": { - "description": "Title of the dropdown button where the type of the token is selected." + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." }, - "period": "Period", - "@period": { - "description": "Title of the dropdown button where the period of the totp token is selected." + "@authNotSupportedBody": { + "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." }, - "rename": "Rename", - "@rename": { - "description": "Label that describes renaming the token." + "@authNotSupportedTitle": { + "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." }, - "cancel": "Cancel", - "@cancel": { - "description": "Button to cancel an action." + "@authToAcceptPushRequest": { + "description": "Message to accepting a push request for authentication." }, - "delete": "Delete", - "@delete": { - "description": "Label that describes deleting the token." + "@authToDeclinePushRequest": { + "description": "Message for declining a push request for authentication." }, - "dismiss": "Dismiss", - "@dismiss": { - "description": "Text of a button that closes a dialog." + "@authenticateToShowOtp": { + "description": "Reason to authenticate when trying to view a one time password." }, - "addToken": "Add token", - "@addToken": { - "description": "The button to open the screen to add tokens by hand." + "@authenticateToUnLockToken": { + "description": "Reason to authenticate when trying to lock or unlock a token." }, - "scanQrCode": "Scan QR-Code", - "@scanQrCode": { - "description": "The button to scan otpauth qr-codes." + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, - "enterDetailsForToken": "Enter token details", - "@enterDetailsForToken": { - "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." + "@biometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterANameForThisToken": "Please enter a name for this token.", - "@pleaseEnterANameForThisToken": { - "description": "Hint telling the user to enter a name for a token." + "@biometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterASecretForThisToken": "Please enter a secret for this token.", - "@pleaseEnterASecretForThisToken": { - "description": "Hint telling the user to enter a secret for a token." + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, - "theSecretDoesNotFitTheCurrentEncoding": "The secret does not fit the current encoding", - "@theSecretDoesNotFitTheCurrentEncoding": { - "description": "Hint telling the user that the secret does not fit the selected encoding." + "@cancel": { + "description": "Button to cancel an action." }, - "notAnNumber": "The value is not a number.", - "@notAnNumber": { - "description": "Error message when the user entered a value that is not a number." + "@checkServerCertificate": { + "description": "Error message when the server certificate should be checked." }, - "notAnInteger" : "The value is not an integer.", - "@notAnInteger": { - "description": "Error message when the user entered a value that is not an integer." + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." }, - "renameToken": "Rename token", - "@renameToken": { - "description": "Title of the dialog where a new name for a token can be entered." + "@clearErrorLog": { + "description": "Button to clear the error log." }, - "confirmDeletion": "Confirm deletion", "@confirmDeletion": { "description": "Title of the dialog where a token can be deleted." }, - "confirmDeletionOf": "Are you sure you want to delete {name}?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", "placeholders": { "name": { "example": "PUSH1234" } - } - }, - "confirmTokenDeletionHint": "You may no longer be able to log in if you delete this token.\nPlease make sure that you can log in to the associated account without this token.", - "@confirmTokenDeletionHint": { - "description": "Gives the user a hint about the consequences of deleting a token." + }, + "type": "text" }, - "confirmFolderDeletionHint": "Deleting a folder has no effect on the tokens in it.\nThe tokens are moved to the main list.", "@confirmFolderDeletionHint": { "description": "Gives the user a hint about the consequences of deleting a folder." }, - "generatingPhonePart": "Generating phone part", - "@generatingPhonePart": { - "description": "Title of a dialog telling the user that the phone part gets generated right now." + "@confirmTokenDeletionHint": { + "description": "Gives the user a hint about the consequences of deleting a token." }, - "phonePart": "Phone part:", - "@phonePart": { - "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + "@connectionFailed": { + "description": "Tells the user that the connection failed." }, - "otpValueCopiedMessage": "Password \"{otpValue}\" copied to clipboard.", - "@otpValueCopiedMessage": { - "description": "Tells the user that the otp value was copied to the clipboard.", - "placeholders": { - "otpValue": { - "example": "055374" - } - } + "@container": { + "description": "Title for the container view." }, - "settings": "Settings", - "@settings": { - "description": "Button to open the settings page." + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." }, - "pushToken": "Push Token", - "@pushToken": { - "description": "Title for the settings block concerning the push tokens." + "@counter": { + "description": "Describes the field where the tokens counter should be entered." }, - "theme": "Theme", - "@theme": { - "description": "Title of the setting group where the theme can be selected." + "@createdAt": { + "description": "Label for the creation date of the token." }, - "lightTheme": "Light", - "@lightTheme": { - "description": "The light theme." + "@creator": { + "description": "Label for the creator of the token." }, - "darkTheme": "Dark", "@darkTheme": { "description": "The dark theme." }, - "systemTheme": "Use device's theme", - "@systemTheme": { - "description": "The systems theme." + "@decline": { + "description": "Label for e.g. a button. Something gets declined by the user." }, - "someTokensDoNotSupportPolling": "Some of the tokens are outdated and do not support polling", - "@someTokensDoNotSupportPolling": { - "description": "Tells the user, that the following tokens do not support polling.", - "type": "text", - "placeholders": {} + "@delete": { + "description": "Label that describes deleting the token." }, - "enablePolling": "Enable polling", - "@enablePolling": { - "description": "Name of the setting switch that enables polling." + "@deviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." }, - "requestPushChallengesPeriodically": "Request push challenges from the server periodically. Enable this if push challenges are not received normally.", - "@requestPushChallengesPeriodically": { - "description": "The description of the polling feature." + "@deviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." }, - "synchronizePushTokens": "Synchronize push tokens", - "@synchronizePushTokens": { - "description": "Title of synchronizing push tokens in settings." + "@digits": { + "description": "Title of the dropdown button where the number of digits for the opt value is selected." }, - "synchronizesTokensWithServer": "Synchronizes tokens with the privacyIDEA server.", - "@synchronizesTokensWithServer": { - "description": "Description of synchronizing push tokens in settings." + "@dismiss": { + "description": "Text of a button that closes a dialog." }, - "sync": "Sync", - "@sync": { - "description": "Text of button that is used to synchronize push tokens." + "@enablePolling": { + "description": "Name of the setting switch that enables polling." }, - "synchronizingTokens": "Synchronizing tokens.", - "@synchronizingTokens": { - "description": "Title of the push synchronization dialog." + "@encoding": { + "description": "Title of the dropdown button where the encoding is selected." }, - "allTokensSynchronized": "All tokens are synchronized.", - "@allTokensSynchronized": { - "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + "@enterDetailsForToken": { + "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." }, - "syncFbTokenFailed": "Synchronization failed for the following tokens, please try again:", - "@syncFbTokenFailed": { - "description": "Headline for the list of tokens where the synchronization failed." + "@errorLogCleared": { + "description": "Message that tells the user that the error log was cleared." }, - "tokensDoNotSupportSynchronization": "The following tokens do not support synchronization and must be rolled out again:", - "@tokensDoNotSupportSynchronization": { - "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + "@errorLogEmpty": { + "description": "Message that tells the user that the error log is empty." + }, + "@errorLogTitle": { + "description": "Title of the error log screen." + }, + "@errorMailBody": { + "description": "Message for email body" }, - "errorRollOutFailed": "Rolling out token {name} failed.", "@errorRollOutFailed": { "description": "Tells the user that the token could not be rolled out, because a network error occurred.", "placeholders": { "name": { "example": "PUSH1234A" } - } + }, + "type": "text" }, - "statusCode": "Status code: {statusCode}", - "@statusCode": { - "description": "Tells the user the status code of the error.", + "@errorRollOutNoConnectionToServer": { + "description": "Tells the user that the roll-out failed because the server could not be reached.", "placeholders": { - "statusCode": { - "example": "400" + "name": { + "example": "PUSH1234A" } } }, - "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, privacyIDEA server could not be reached.", - "@errorSynchronizationNoNetworkConnection": { - "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." - }, - "errorRollOutNoConnectionToServer": "Rolling out token {name} failed, the server could not be reached.", - "@errorRollOutNoConnectionToServer": { - "description": "Tells the user that the roll-out failed because the server could not be reached." + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." }, - "errorRollOutUnknownError": "An unknown error occurred. Roll-out not possible: {e}", "@errorRollOutUnknownError": { "description": "Tells the user that the roll-out failed because of an unknown error.", "placeholders": { "e": { "example": "IllegalArgumentException on Line 5 ..." } - } - }, - "startRollout": "Start rollout", - "@startRollout": { - "description": "Label that tells the user that the token is being rolled out." - }, - "pollingChallenges": "Polling for new challenges", - "@pollingChallenges": { - "placeholders": {} + }, + "type": "text" }, - "unexpectedError": "An unexpected error occurred.", - "@unexpectedError": { - "description": "Title of page report mode." + "@errorSynchronizationNoNetworkConnection": { + "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, - "pollingFailed": "Polling failed.", - "@pollingFailed": { - "description": "Tells the user that the polling failed." + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "pollingFailedFor": "Polling failed for {serial}", - "@pollingFailedFor": { - "description": "Tells the user that the polling failed.", + "@errorUnlinkingPushToken": { + "description": "Error message when unlinking a push token failed.", "placeholders": { - "serial": { + "label": { "example": "PUSH1234A" } } }, - "noNetworkConnection": "No network connection.", - "@noNetworkConnection": { - "description": "Tells the user that there is no network connection." + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "connectionFailed": "Connection failed.", - "@connectionFailed": { - "description": "Tells the user that the connection failed." + "@failedToLoad": { + "placeholders": { + "name": { + "example": "token data" + } + } }, - "checkYourNetwork": "Please check your network connection and try again.", - "@checkYourNetwork": { - "description": "Tells the user to check the network connection." + "@feedbackPrivacyPolicy2": { + "description": "Taping on this should open the privacy policy." }, - "serverNotReachable": "The server could not be reached.", - "@serverNotReachable": { - "description": "Tells the user that the server could not be reached." + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." }, - "couldNotSignMessage": "Could not sign message.", - "@couldNotSignMessage": { - "description": "Tells the user that the message could not be signed." + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" }, - "useDeviceLocaleTitle": "Use device language", - "@useDeviceLocaleTitle": { - "description": "Title of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" }, - "useDeviceLocaleDescription": "Use device language if it is supported, otherwise default to english.", - "@useDeviceLocaleDescription": { - "description": "Description of the switch tile where using the devices language can be enabled." + "@goToSettingsButton": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." }, - "language": "Language", - "@language": { - "description": "Title of language setting group." + "@goToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." }, - "authenticateToShowOtp": "Please authenticate to show one time password.", - "@authenticateToShowOtp": { - "description": "Reason to authenticate when trying to view a one time password." + "@guide": { + "description": "Button to open the guide screen." }, - "authenticateToUnLockToken": "Please authenticate to change the lock status of the token.", - "@authenticateToUnLockToken": { - "description": "Reason to authenticate when trying to lock or unlock a token." + "@handshakeFailed": { + "description": "Error message when the handshake failed." }, - "biometricRequiredTitle": "Biometrics not setup", - "@biometricRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + "@importedVia": { + "description": "Label for the import method of the token." }, - "biometricHint": "Authentication required", - "@biometricHint": { - "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + "@internalServerError": { + "placeholders": { + "code": { + "example": "500" + } + } }, - "biometricNotRecognized": "Not recognized. Try again.", - "@biometricNotRecognized": { - "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + "@invalidValue": { + "description": "Error message when the value is not valid for the parameter.", + "placeholders": { + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "biometricSuccess": "Authentication successful", - "@biometricSuccess": { - "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + "@invalidValueIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsRequiredTitle": "Device credentials not set up", - "@deviceCredentialsRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + "@isExpotableQuestion": { + "description": "Label for the question if the token is exportable." }, - "deviceCredentialsSetupDescription": "Setup device credentials in the device's settings", - "@deviceCredentialsSetupDescription": { - "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + "@isPiTokenQuestion": { + "description": "Label for the question if the token is a privacyIDEA token." }, - "signInTitle": "Authentication required", - "@signInTitle": { - "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + "@language": { + "description": "Title of language setting group." }, - "goToSettingsButton": "Go to settings", - "@goToSettingsButton": { - "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + "@legacySigningErrorMessage": { + "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." }, - "goToSettingsDescription": "Authentication by credentials or biometrics is not set up on your device. Please set it up in the device's settings.", - "@goToSettingsDescription": { - "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." + "@legacySigningErrorTitle": { + "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "placeholders": { + "tokenLabel": { + "example": "PUSH1234A" + } + } + }, + "@lightTheme": { + "description": "The light theme." + }, + "@linkedContainer": { + "description": "Label for the linked container serial number." + }, + "@lock": { + "description": "Description of button that locks a token." }, - "lockOut": "Biometric authentication is disabled. Please lock and unlock your screen to enable it.", "@lockOut": { "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." }, - "authNotSupportedTitle": "Device credentials or biometrics required", - "@authNotSupportedTitle": { - "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." + "@logMenu": { + "description": "Button to open the log menu." }, - "authNotSupportedBody": "This action requires the device to be secured by credentials or biometrics.", - "@authNotSupportedBody": { - "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." + "@malformedData": { + "description": "Error message when the data is malformed." }, - "lock": "Lock", - "@lock": { - "description": "Description of button that locks a token." + "@missingRequiredParameter": { + "description": "Error message when a required parameter is missing.", + "placeholders": { + "parameter": { + "example": "counter" + } + } }, - "unlock": "Unlock", - "@unlock": { - "description": "Description of button that unlocks a token." + "@missingRequiredParameterIn": { + "description": "Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.", + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + } + } }, - "noResultTitle": "No tokens stored yet.", - "@noResultTitle": { - "description": "No tokens stored yet." + "@mustNotBeEmpty": { + "placeholders": { + "field": { + "example": "Name" + } + } + }, + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "@noFbToken": { + "description": "Tells the user that there is no Firebase token available." + }, + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." }, - "noResultText1": "Tap the ", "@noResultText1": { "description": "first no result text" }, - "noResultText2": " button to get started!", "@noResultText2": { "description": "second no result text" }, - "onBoardingTitle1": "{appName}", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "@notAnInteger": { + "description": "Error message when the user entered a value that is not an integer." + }, + "@notAnNumber": { + "description": "Error message when the user entered a value that is not a number." + }, + "@ok": { + "description": "Button to confirm an action." + }, "@onBoardingTitle1": { "placeholders": { "appName": { @@ -387,350 +364,205 @@ } } }, - "onBoardingText1": "Two-factor authentication\nmade easy", - "onBoardingTitle2": "Maximum Security", - "onBoardingText2": "Store tokens on your device securely\nProtected by your biometrics", - "onBoardingTitle3": "Visit us at Github", - "onBoardingText3": "This app is open source", - "errorLogTitle": "Error log", - "logMenu": "Log menu", - "showErrorLog": "Show", - "clearErrorLog": "Clear", - "send": "Send", - "sendErrorLogDescription": "A predefined email is created.\nIt contains information about the app, the error and the device.\nYou can edit the email before sending it.\nYou can see here how we use the information:", - "@sendErrorLogDescription": { - "description": "Explanation for the user what he will send." - }, - "showPrivacyPolicy": "Show privacy policy", - "errorLogEmpty": "The error log is empty.", - "verboseLogging": "Verbose logging", - "errorLogCleared": "Error log cleared.", - "ok": "Ok", - "errorMailBody": "The error log file is attached.\nYou can replace this text with additional information about the error.", - "@errorMailBody": { - "description": "Message for email body" - }, - "showDetails": "Show details", - "open": "Open", - "sendErrorDialogBody": "An unexpected error occurred in the application. The information below can be send to the developers by email to help prevent this error in the future.", - "@sendErrorDialogBody": { - "description": "Description shown to the user about what info the error report contains." - }, - "noFbToken": "No Firebase token available", - "firebaseToken": "Firebase Token", - "noPublicKey": "No public key available", - "publicKey": "Public Key", - "editToken": "Edit Token", - "edit": "Edit", - "save": "Save", - "create": "Create", - "validFor": "Valid for", - "validUntil": "Valid until", - "deleteLockedToken": "Please authenticate to delete the locked token.", - "editLockedToken": "Please authenticate to edit the locked token.", - "expandLockedFolder": "Please authenticate to uncollapse the locked folder.", - "renameTokenFolder": "Rename folder", - "@renameTokenFolder": { - "description": "Title of the dialog where a new name for a token folder can be entered." - }, - "addANewFolder": "Create new folder", - "folderName": "Folder name", - "retryRollout": "Retry rollout", - "generatingRSAKeyPair": "Generating RSA key pair", - "@generatingRSAKeyPair": { - "description": "Message for the rollout process" + "@open": { + "description": "Button to open something." }, - "generatingRSAKeyPairFailed": "Generating RSA key pair failed", - "@generatingRSAKeyPairFailed": { - "description": "Message for the rollout process" + "@originApp": { + "description": "Label for the origin app." }, - "sendingRSAPublicKey": "Sending public RSA key", - "@sendingRSAPublicKey": { - "description": "Message for the rollout process" + "@originDetails": { + "description": "Title of the origin details menu." }, - "sendingRSAPublicKeyFailed": "Sending public RSA key failed", - "@sendingRSAPublicKeyFailed": { - "description": "Message for the rollout process" + "@otpValueCopiedMessage": { + "description": "Tells the user that the otp value was copied to the clipboard.", + "placeholders": { + "otpValue": { + "example": "055374" + } + }, + "type": "text" }, - "parsingResponse": "Parsing response", "@parsingResponse": { "description": "Message for the rollout process" }, - "parsingResponseFailed": "Parsing response failed", "@parsingResponseFailed": { "description": "Message for the rollout process" }, - "rolloutCompleted": "Rollout completed", - "@rolloutCompleted": { - "description": "Message for the rollout process" + "@period": { + "description": "Title of the dropdown button where the period of the totp token is selected." }, - "authToAcceptPushRequest": "Please authenticate to accept the push request.", - "authToDeclinePushRequest": "Please authenticate to decline the push request.", - "pushRequestParseError": "Push request could not be parsed.", - "imageUrl": "Image URL", - "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", - "@errorRollOutSSLHandshakeFailed": { - "description": "Tells the user that the roll-out failed because the SSL handshake failed." + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", - "@errorWhenPullingChallenges": { - "description": "errorWhenPullingChallenges", - "placeholders": { - "name": { - "example": "PUSH1234A" - } - } + "@pleaseEnterANameForThisToken": { + "description": "Hint telling the user to enter a name for a token." }, - "couldNotConnectToServer": "Could not connect to server", - "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", - "errorTokenExpired": "The token {name} has expired.", - "@errorTokenExpired": { - "placeholders": { - "name": { - "example": "PUSH1234A" - } - } + "@pleaseEnterASecretForThisToken": { + "description": "Hint telling the user to enter a secret for a token." }, - "yes": "Yes", - "no": "No", - "butDiscardIt": "but discard it", - "declineIt": "decline it", - "requestTriggerdByUserQuestion": "Was this request triggered by you?", - "grantCameraPermissionDialogTitle": "Camera permission is not granted", - "grantCameraPermissionDialogContent": "Please grant camera permission to scan QR codes.", - "grantCameraPermissionDialogPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in your Phone's settings.", - "grantCameraPermissionDialogButton": "Grant permission", - "decryptErrorTitle": "Decryption error", - "decryptErrorContent": "Unfortunately, the app was unable to decrypt your tokens. This indicates that the encryption key is broken. You can try again or delete the app data, which would delete the tokens in the app.", - "decryptErrorButtonDelete": "Delete", - "decryptErrorButtonSendError": "Send error", - "decryptErrorButtonRetry": "Retry", - "decryptErrorDeleteConfirmationContent": "Are you sure you want to delete the app data?", - "hidePushTokens": "Hide push tokens", - "hidePushTokensDescription": "Hide push tokens from the token list. This will not delete the tokens and they will still be visible on a separate screen.", - "settingsGroupGeneral": "General", - "licensesAndVersion": "Licenses and version", - "privacyPolicy": "Privacy policy", - "introScanQrCode": "You can scan QR codes to add tokens.\nWe support every common Two-Factor-Authentication token and also the privacyIDEA tokens.", - "introAddTokenManually": "If you don't want to scan a QR code, you can also add tokens manually.", - "introTokenSwipe": "Swipe tokens to the left to see available actions.", - "introEditToken": "Here you can edit the token name and see some details.", - "introLockToken": "To improve security even more, you can lock tokens.\nThen the token can only be used after authentication.", - "introDragToken": "Reorganize your tokens by pressing it for a few seconds and then dragging it to the desired position.", - "introAddFolder": "You can create folders\nto organize your tokens.", - "introPollForChallenges": "You can check for new challenges by dragging down the token list.", - "introHidePushTokens": "Your push tokens are hidden now.\nBut you can still see them on the push token screen.", - "legacySigningErrorTitle": "An error occured while using the legacy token: {tokenLabel}", - "@legacySigningErrorTitle": { - "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "@pollingChallenges": { + "type": "text" + }, + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", "placeholders": { - "tokenLabel": { + "serial": { "example": "PUSH1234A" } } }, - "legacySigningErrorMessage": "The token was enrolled in a old version of this app, which may cause trouble using it.\nIt is suggested to enroll a new push token if the problem persist!", - "@legacySigningErrorMessage": { - "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." }, - "selectImportSource": "Select import source", - "selectImportType": "How do you want to import the tokens?", - "importTokens": "Import token", - "importNTokens": "{count, plural, zero{Import no token} one{Import one token} other{Import {count} tokens}}", - "selectFile": "Select file", - "decrypt": "Decrypt", - "tokensAreEncrypted": "The tokens are encrypted. Please enter the password to decrypt them.", - "tokensNotEncrypted": "The tokens are not encrypted and can be imported directly.", - "tokensSuccessfullyDecrypted": "The tokens have been successfully decrypted and can now be imported.", - "password": "Password", - "wrongPassword": "Incorrect password", - "qrScan": "Scan", - "enterLink": "Enter link", - "invalidBackupFile": "The selected file is not a valid backup of {appName}.", - "invalidQrScan": "The scanned QR code is not a valid backup of {appName}.", - "invalidQrFile": "The selected file does not contain a valid QR code from {appName}.", - "invalidLink": "The link entered is not a valid token of {appName}, or it is not supported.", - "importFailedToken": "{count, plural, zero{No token Failed to import.} one{Failed to import a token.} other{Failed to import {count} tokens.}}", - "importExistingToken": "{count, plural, zero{No token was found that is already in the application.} one{A token was found that already exists in the application.} other{{count} tokens was found that are already in the application.}}", - "importConflictToken": "{count, plural, zero{There is no conflict with existing tokens.} one{There is a conflict with existing tokens.\nPlease select which one you would like to keep.} other{There are conflicts with existing tokens.\nPlease select the tokens you wish to keep.}}", - "importNewToken": "{count, plural, zero{No new token was found.} one{A new token was found that can be imported.} other{{count} new tokens were found that can be imported.}}", - "importHintPrivacyIdeaQrScan": "Um QR-Codes der Token zu erstellen, navigieren Sie zu den Einstellungen und tippen auf \"Exportieren\". Wählen Sie dann \"Als QR-Code\" und tippen Sie auf den zu exportierenden Token. Diese Variante ist nur für die direkte Übertragung auf ein anderes Gerät geeignet, da der QR-Code nicht verschlüsselt ist.", - "importHintPrivacyIdeaFile": "To create a backup, go to the settings and tap on \"Export\". Select \"As file\", select the tokens you want to export. Then tap on \"Export\" and set a password. The storage location is the download folder on your device.", - "importHint2FAS": "Select your 2FAS backup.\nIf you do not have a backup, create one in the 2FAS app. We recommend using a password.", - "importHintAegisBackupFile": "Select your Aegis export (.JSON).\nIf you do not have an export, please create one via the settings menu in the Aegis app. The use of a password is recommended.", - "importHintAegisQrScan": "Scan the QR code you receive when you transfer entries from Aegis.", - "importHintAegisLink": "Enter the link you receive when you transfer entries from Aegis.", - "importHintGoogleQrScan": "Scan the QR code you receive when you export your accounts from Google Authenticator.", - "importHintGoogleQrFile": "Select an image file with the QR code you receive when you export your accounts from Google Authenticator.\n!! Note that it is not safe to save the QR code on your device as the tokens are not encrypted !!", - "importHintAuthenticatorProFile": "To create a backup of the Authenticator Pro app, navigate to the settings and tap on \"Auto backup\". Select a storage location and set a password. Then press \"Back up now\" to export the tokens.", - "importHintFreeOtpPlusQrScan": "Scan the QR code you receive when you press the three dots in the tile of the token and select \"Share QR code\".", - "importHintFreeOtpPlusFile": "To create a backup of the FreeOTP+ app, tap on the three dots in the upper right corner and select \"Export\". You can choose between JSON and URI format. We recommend to delete the backup after importing it, because it is not encrypted.", - "qrFileDecodeError": "It was not possible to decode the QR code from the selected image, please use the QR code scanner instead.", - "tokenLink": "Token link", - "feedback": "Feedback", - "feedbackTitle": "Your feedback is always welcome!", - "feedbackDescription": "If you have any questions, suggestions or problems, please let us know.", - "feedbackHint": "A ready-made e-mail will open, which you can send to us. If desired, information about your device and the version of the application will be added. You can check and edit the email before sending it.", - "feedbackPrivacyPolicy1": "By sending the feedback you agree to our ", - "feedbackPrivacyPolicy2": "privacy policy", - "@feedbackPrivacyPolicy2": { - "description": "Taping on this should open the privacy policy." + "@rename": { + "description": "Label that describes renaming the token." + }, + "@renameToken": { + "description": "Title of the dialog where a new name for a token can be entered." + }, + "@renameTokenFolder": { + "description": "Title of the dialog where a new name for a token folder can be entered." }, - "feedbackPrivacyPolicy3": ".", - "addSystemInfo": "Add system information", - "feedbackSentTitle": "Feedback sent", - "feedbackSentDescription": "Thank you very much for your help in making this application better!", - "patchNotesDialogTitle": "What's new?", - "version": "Version", - "noMailAppTitle": "No mail app found", - "noMailAppDescription": "There is no e-mail app installed or initialised on this device, please try again when you are able to send an email message.", - "authenticationRequest": "Authentication request", - "requestInfo": "Sent by {issuer} for your account: \"{account}\"", "@requestInfo": { "description": "Description of the authentication request.", "placeholders": { - "issuer": { - "example": "privacyIDEA" - }, "account": { "example": "GitHub" + }, + "issuer": { + "example": "privacyIDEA" } } }, - "errorUnlinkingPushToken": "Failed to unlink the push token {label}.", - "@errorUnlinkingPushToken": { - "description": "Error message when unlinking a push token failed.", - "placeholders": { - "label": { - "example": "PUSH1234A" - } - } + "@requestPushChallengesPeriodically": { + "description": "The description of the polling feature." }, - "pleaseSyncManuallyWhenNetworkIsAvailable": "Please synchronize the push tokens manually via the settings when a network connection is available.", - "pushTokens": "Push Tokens", - "continueButton": "Continue", - "addTokenManually": "Add token manually", - "addFolder": "Add folder", - "searchTokens": "Search tokens", - "closeSearchTokens": "Close search", - "increaseCounter": "Increase counter", - "copyOTPToClipboard": "Copy OTP to clipboard", - "licenses": "Licenses", - "optionalMessage": "Optional message", - "confirmation": "Confirmation", - "askLogSendedDescription": "Did you send the log, and do you want to clear it now?", - "algorithmUnsupported": "The algorithm {algorithm} is not supported", - "@algorithmUnsupported": { - "placeholders": { - "algorithm": { - "example": "MD5" - } - } + "@retry": { + "description": "Label for e.g. a button. Something is tried to be done again." }, - "thisAppIsOpenSource": "This Application is Open Source\nVisit us on GitHub", - "importExportTokens": "Import/Export tokens", - "exportNonPrivacyIDEATokens": "Export non-privacyIDEA tokens", - "selectTokensToExport": "{count, plural, zero{} one{Select token to export} other{Select tokens to export}}", - "noTokenToExport": "No token available for export", - "exportAllTokens": "Export all tokens", - "export": "Export", - "exportingTokens": "Exporting tokens...", - "exportTokens": "Export tokens", - "enterPasswordToEncrypt": "Enter a password to encrypt the tokens. This password will be required to import the tokens.", - "exportLockedTokenReason": "Please authenticate to export locked tokens.", - "fileSavedToDownloadsFolder": "File saved to Downloads folder", - "errorSavingFile": "Saving to file failed", - "asQrCode": "As QR code", - "asFile": "As file", - "scanThisQrWithNewDevice": "Scan this QR code with your new device to import the token.", - "oneMore": "One more", - "done": "Done", - "confirmPassword": "Confirm password", - "secretIsRequired": "Secret is required", - "tokenDataParseError": "Token data could not be parsed", - "missingRequiredParameter": "Value for parameter [{counter}] is required and is missing", - "@missingRequiredParameter": { - "placeholders": { - "counter": { - "example": "counter" - } - } - }, "missingRequiredParameterIn": "Value for parameter [{parameter}] is required and is missing in \"{map}\"", - "@missingRequiredParameterIn": { - "placeholders": { - "parameter": { - "example": "counter" - }, - "map": { - "example": "query parameters" - } - } + "@rolloutCompleted": { + "description": "Message for the rollout process" }, - "invalidValue": "The {type} \"{value}\" is not valid for \"{parameter}\"", - "@invalidValue": { - "placeholders": { - "type": { - "example": "int" - }, - "value": { - "example": "5" - }, - "parameter": { - "example": "counter" - } - } + "@scanQrCode": { + "description": "The button to scan otpauth qr-codes." }, - "invalidValueIn": "The {type} \"{value}\" is not valid for \"{parameter}\" in \"{map}\"", - "@invalidValueIn": { - "placeholders": { - "type": { - "example": "int" - }, - "value": { - "example": "5" - }, - "parameter": { - "example": "counter" - }, - "map": { - "example": "query parameters" - } - - } + "@secretIsRequired": { + "description": "Error message when the secret is missing." }, - "valueNotAllowed": "The {type} \"{value}\" is not an allowed value for \"{parameter}\"", - "@valueNotAllowed": { - "placeholders": { - "type": { - "example": "int" - }, - "value": { - "example": "-1" - }, - "parameter": { - "example": "counter" - } - } + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." }, - "valueNotAllowedIn": "The {type} \"{value}\" is not an allowed value for \"{parameter}\" in \"{map}\"", - "@valueNotAllowedIn": { - "placeholders": { - "type": { - "example": "int" - }, - "value": { - "example": "-1" - }, - "parameter": { - "example": "counter" - }, - "map": { - "example": "query parameters" + "@send": { + "description": "Button to send the error log." + }, + "@sendErrorDialogBody": { + "description": "Description shown to the user about what info the error report contains." + }, + "@sendErrorLogDescription": { + "description": "Explanation for the user what he will send." + }, + "@sendPushRequestResponseFailed": { + "description": "Error message when the response to a push request could not be sent." + }, + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "@serverNotReachable": { + "description": "Tells the user that the server could not be reached." + }, + "@settings": { + "description": "Button to open the settings page." + }, + "@showDetails": { + "description": "Button to show details." + }, + "@showErrorLog": { + "description": "Button to show the error log." + }, + "@showPrivacyPolicy": { + "description": "Button to show the privacy policy." + }, + "@signInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "@someTokensDoNotSupportPolling": { + "description": "Tells the user, that the following tokens do not support polling.", + "type": "text" + }, + "@startRollout": { + "description": "Label that tells the user that the token is being rolled out." + }, + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" } - } }, - "unsupported": "The {name} [{value}] is not supported by this version of the app.", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "@syncContainerFailed": { + "description": "Error message when synchronizing a container failed." + }, + "@syncFbTokenFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "@systemTheme": { + "description": "The systems theme." + }, + "@theSecretDoesNotFitTheCurrentEncoding": { + "description": "Hint telling the user that the secret does not fit the selected encoding." + }, + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "@themeMode": { + "description": "Title of the setting group where the theme mode can be changed." + }, + "@timeOut": { + "description": "Error message when a request times out." + }, + "@tokenDataParseError": { + "description": "Error message when the token data could not be parsed." + }, + "@tokenDetails": { + "description": "Title of the token details menu." + }, + "@tokenSerial": { + "description": "Label for the token serial number." + }, + "@tokensDoNotSupportSynchronization": { + "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + }, + "@type": { + "description": "Title of the dropdown button where the type of the token is selected." + }, + "@unexpectedError": { + "description": "Title of page report mode." + }, + "@unknown": { + "description": "Tells that something is unknown." + }, + "@unlock": { + "description": "Description of button that unlocks a token." + }, "@unsupported": { "placeholders": { "name": { @@ -741,55 +573,348 @@ } } }, - "pushEndpointUrl": "Push endpoint URL", - "exampleUrl": "Please enter a valid URL like: \"https://example.com/\"", - "mustNotBeEmpty": "{field} must not be empty", - "@mustNotBeEmpty": { + "@useDeviceLocaleDescription": { + "description": "Description of the switch tile where using the devices language can be enabled." + }, + "@useDeviceLocaleTitle": { + "description": "Title of the switch tile where using the devices language can be enabled." + }, + "@valueNotAllowed": { "placeholders": { - "field": { - "example": "Name" + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "sendPushRequestResponseFailed": "Failed to send the response.", - "@sendPushRequestResponseFailed": { - "description": "Error message when the response to a push request could not be sent." + "@valueNotAllowedIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" + } + } + }, + "@verboseLogging": { + "description": "Title of the switch tile where verbose logging can be enabled." }, + "accept": "Accept", + "addANewFolder": "Create new folder", + "addFolder": "Add folder", + "addSystemInfo": "Add system information", + "addToken": "Add token", + "addTokenManually": "Add token manually", + "algorithm": "Algorithm", + "algorithmUnsupported": "The algorithm {algorithm} is not supported", + "allTokensSynchronized": "All tokens are synchronized.", + "asFile": "As file", + "asQrCode": "As QR code", + "askLogSendedDescription": "Did you send the log, and do you want to clear it now?", + "authNotSupportedBody": "This action requires the device to be secured by credentials or biometrics.", + "authNotSupportedTitle": "Device credentials or biometrics required", + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "authenticateToShowOtp": "Please authenticate to show one time password.", + "authenticateToUnLockToken": "Please authenticate to change the lock status of the token.", + "authenticationRequest": "Authentication request", + "biometricHint": "Authentication required", + "biometricNotRecognized": "Not recognized. Try again.", + "biometricRequiredTitle": "Biometrics not setup", + "biometricSuccess": "Authentication successful", + "butDiscardIt": "but discard it", + "cancel": "Cancel", + "checkServerCertificate": "Please check the server certificate", + "checkYourNetwork": "Please check your network connection and try again.", + "clearErrorLog": "Clear", + "closeSearchTokens": "Close search", + "confirmDeletion": "Confirm deletion", + "confirmDeletionOf": "Are you sure you want to delete {name}?", + "confirmFolderDeletionHint": "Deleting a folder has no effect on the tokens in it.\nThe tokens are moved to the main list.", + "confirmPassword": "Confirm password", + "confirmTokenDeletionHint": "You may no longer be able to log in if you delete this token.\nPlease make sure that you can log in to the associated account without this token.", + "confirmation": "Confirmation", + "connectionFailed": "Connection failed.", + "container": "Container", + "continueButton": "Continue", + "copyOTPToClipboard": "Copy OTP to clipboard", + "couldNotConnectToServer": "Could not connect to server", + "couldNotSignMessage": "Could not sign message.", + "counter": "Counter", + "create": "Create", + "createdAt": "Created on", + "creator": "Creator", + "decline": "Decline", + "declineIt": "decline it", + "decrypt": "Decrypt", + "decryptErrorButtonDelete": "Delete", + "decryptErrorButtonRetry": "Retry", + "decryptErrorButtonSendError": "Send error", + "decryptErrorContent": "Unfortunately, the app was unable to decrypt your tokens. This indicates that the encryption key is broken. You can try again or delete the app data, which would delete the tokens in the app.", + "decryptErrorDeleteConfirmationContent": "Are you sure you want to delete the app data?", + "decryptErrorTitle": "Decryption error", + "delete": "Delete", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "deviceCredentialsRequiredTitle": "Device credentials not set up", + "deviceCredentialsSetupDescription": "Setup device credentials in the device's settings", + "digits": "Digits", + "dismiss": "Dismiss", + "done": "Done", + "edit": "Edit", + "editLockedToken": "Please authenticate to edit the locked token.", + "editToken": "Edit Token", + "enablePolling": "Enable polling", + "encoding": "Encoding", + "enterDetailsForToken": "Enter token details", + "enterLink": "Enter link", + "enterPasswordToEncrypt": "Enter a password to encrypt the tokens. This password will be required to import the tokens.", + "errorLogCleared": "Error log cleared.", + "errorLogEmpty": "The error log is empty.", + "errorLogTitle": "Error log", + "errorMailBody": "The error log file is attached.\nYou can replace this text with additional information about the error.", + "errorRollOutFailed": "Rolling out token {name} failed.", + "errorRollOutNoConnectionToServer": "Rolling out token {name} failed, the server could not be reached.", + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "errorRollOutUnknownError": "An unknown error occurred. Roll-out not possible: {e}", + "errorSavingFile": "Saving to file failed", + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, privacyIDEA server could not be reached.", + "errorTokenExpired": "The token {name} has expired.", + "errorUnlinkingPushToken": "Failed to unlink the push token {label}.", + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "exampleUrl": "Please enter a valid URL like: \"https://example.com/\"", + "expandLockedFolder": "Please authenticate to uncollapse the locked folder.", + "export": "Export", + "exportAllTokens": "Export all tokens", + "exportLockedTokenReason": "Please authenticate to export locked tokens.", + "exportNonPrivacyIDEATokens": "Export non-privacyIDEA tokens", + "exportTokens": "Export tokens", + "exportingTokens": "Exporting tokens...", + "failedToLoad": "Failed to load: \"{name}\"", + "feedback": "Feedback", + "feedbackDescription": "If you have any questions, suggestions or problems, please let us know.", + "feedbackHint": "A ready-made e-mail will open, which you can send to us. If desired, information about your device and the version of the application will be added. You can check and edit the email before sending it.", + "feedbackPrivacyPolicy1": "By sending the feedback you agree to our ", + "feedbackPrivacyPolicy2": "privacy policy", + "feedbackPrivacyPolicy3": ".", + "feedbackSentDescription": "Thank you very much for your help in making this application better!", + "feedbackSentTitle": "Feedback sent", + "feedbackTitle": "Your feedback is always welcome!", + "fileSavedToDownloadsFolder": "File saved to Downloads folder", + "findingQrCodeInImage": "Looking for QR code in image...", + "firebaseToken": "Firebase Token", + "folderName": "Folder name", + "generatingPhonePart": "Generating phone part", + "generatingRSAKeyPair": "Generating RSA key pair", + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "goToSettingsButton": "Go to settings", + "goToSettingsDescription": "Authentication by credentials or biometrics is not set up on your device. Please set it up in the device's settings.", + "grantCameraPermissionDialogButton": "Grant permission", + "grantCameraPermissionDialogContent": "Please grant camera permission to scan QR codes.", + "grantCameraPermissionDialogPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in your Phone's settings.", + "grantCameraPermissionDialogTitle": "Camera permission is not granted", + "handshakeFailed": "Handshake failed", + "hidePushTokens": "Hide push tokens", + "hidePushTokensDescription": "Hide push tokens from the token list. This will not delete the tokens and they will still be visible on a separate screen.", + "imageUrl": "Image URL", + "importConflictToken": "{count, plural, zero{There is no conflict with existing tokens.} one{There is a conflict with existing tokens.\nPlease select which one you would like to keep.} other{There are conflicts with existing tokens.\nPlease select the tokens you wish to keep.}}", + "importExistingToken": "{count, plural, zero{No token was found that is already in the application.} one{A token was found that already exists in the application.} other{{count} tokens was found that are already in the application.}}", + "importExportTokens": "Import/Export tokens", + "importFailedToken": "{count, plural, zero{No token Failed to import.} one{Failed to import a token.} other{Failed to import {count} tokens.}}", + "importHint2FAS": "Select your 2FAS backup.\nIf you do not have a backup, create one in the 2FAS app. We recommend using a password.", + "importHintAegisBackupFile": "Select your Aegis export (.JSON).\nIf you do not have an export, please create one via the settings menu in the Aegis app. The use of a password is recommended.", + "importHintAegisLink": "Enter the link you receive when you transfer entries from Aegis.", + "importHintAegisQrScan": "Scan the QR code you receive when you transfer entries from Aegis.", + "importHintAuthenticatorProFile": "To create a backup of the Authenticator Pro app, navigate to the settings and tap on \"Auto backup\". Select a storage location and set a password. Then press \"Back up now\" to export the tokens.", + "importHintFreeOtpPlusFile": "To create a backup of the FreeOTP+ app, tap on the three dots in the upper right corner and select \"Export\". You can choose between JSON and URI format. We recommend to delete the backup after importing it, because it is not encrypted.", + "importHintFreeOtpPlusQrScan": "Scan the QR code you receive when you press the three dots in the tile of the token and select \"Share QR code\".", + "importHintGoogleQrFile": "Select an image file with the QR code you receive when you export your accounts from Google Authenticator.\n!! Note that it is not safe to save the QR code on your device as the tokens are not encrypted !!", + "importHintGoogleQrScan": "Scan the QR code you receive when you export your accounts from Google Authenticator.", + "importHintPrivacyIdeaFile": "To create a backup, go to the settings and tap on \"Export\". Select \"As file\", select the tokens you want to export. Then tap on \"Export\" and set a password. The storage location is the download folder on your device.", + "importHintPrivacyIdeaQrScan": "Um QR-Codes der Token zu erstellen, navigieren Sie zu den Einstellungen und tippen auf \"Exportieren\". Wählen Sie dann \"Als QR-Code\" und tippen Sie auf den zu exportierenden Token. Diese Variante ist nur für die direkte Übertragung auf ein anderes Gerät geeignet, da der QR-Code nicht verschlüsselt ist.", + "importNTokens": "{count, plural, zero{Import no token} one{Import one token} other{Import {count} tokens}}", + "importNewToken": "{count, plural, zero{No new token was found.} one{A new token was found that can be imported.} other{{count} new tokens were found that can be imported.}}", + "importTokens": "Import token", + "importedVia": "Imported via", + "increaseCounter": "Increase counter", + "internalServerError": "Internal server error ({code})", + "introAddFolder": "You can create folders\nto organize your tokens.", + "introAddTokenManually": "If you don't want to scan a QR code, you can also add tokens manually.", + "introDragToken": "Reorganize your tokens by pressing it for a few seconds and then dragging it to the desired position.", + "introEditToken": "Here you can edit the token name and see some details.", + "introHidePushTokens": "Your push tokens are hidden now.\nBut you can still see them on the push token screen.", + "introLockToken": "To improve security even more, you can lock tokens.\nThen the token can only be used after authentication.", + "introPollForChallenges": "You can check for new challenges by dragging down the token list.", + "introScanQrCode": "You can scan QR codes to add tokens.\nWe support every common Two-Factor-Authentication token and also the privacyIDEA tokens.", + "introTokenSwipe": "Swipe tokens to the left to see available actions.", + "invalidBackupFile": "The selected file is not a valid backup of {appName}.", + "invalidLink": "The link entered is not a valid token of {appName}, or it is not supported.", + "invalidQrFile": "The selected file does not contain a valid QR code from {appName}.", + "invalidQrScan": "The scanned QR code is not a valid backup of {appName}.", + "invalidValue": "The {type} \"{value}\" is not valid for \"{parameter}\"", + "invalidValueIn": "The {type} \"{value}\" is not valid for \"{parameter}\" in \"{map}\"", + "isExpotableQuestion": "Is exportable?", + "isPiTokenQuestion": "It's a privacyIDEA token?", + "language": "Language", + "legacySigningErrorMessage": "The token was enrolled in a old version of this app, which may cause trouble using it.\nIt is suggested to enroll a new push token if the problem persist!", + "legacySigningErrorTitle": "An error occured while using the legacy token: {tokenLabel}", + "licenses": "Licenses", + "licensesAndVersion": "Licenses and version", + "linkedContainer": "Linked container", + "lock": "Lock", + "lockOut": "Biometric authentication is disabled. Please lock and unlock your screen to enable it.", + "logMenu": "Log menu", + "malformedData": "Malformed data", + "markQrCode": "Mark QR Code", + "missingRequiredParameter": "The value for the [{parameter}] parameter is required, but is missing.", + "missingRequiredParameterIn": "The value for the parameter [{parameter}] is required, but is missing in \"{map}\".", + "mustNotBeEmpty": "{field} must not be empty", + "name": "Name", + "no": "No", + "noFbToken": "No Firebase token available", + "noMailAppDescription": "There is no e-mail app installed or initialised on this device, please try again when you are able to send an email message.", + "noMailAppTitle": "No mail app found", + "noNetworkConnection": "No network connection.", + "noPublicKey": "No public key available", + "noResultText1": "Tap the ", + "noResultText2": " button to get started!", + "noResultTitle": "No tokens stored yet.", + "noTokenToExport": "No token available for export", + "notAnInteger": "The value is not an integer.", + "notAnNumber": "The value is not a number.", + "ok": "Ok", + "oneMore": "One more", + "open": "Open", + "optionalMessage": "Optional message", + "originApp": "Origin app", + "originDetails": "Origin details", + "otpValueCopiedMessage": "Password \"{otpValue}\" copied to clipboard.", + "parsingResponse": "Parsing response", + "parsingResponseFailed": "Parsing response failed", + "password": "Password", "passwordCannotBeEmpty": "Password cannot be empty", - "passwordMustBeAtLeast8Characters": "Password must be at least 8 characters", "passwordCannotContainWhitespace": "Password cannot contain whitespace", + "passwordMustBeAtLeast8Characters": "Password must be at least 8 characters", "passwordMustContainLowercaseLetter": "Password must contain lowercase letter", - "passwordMustContainUppercaseLetter": "Password must contain uppercase letter", "passwordMustContainNumber": "Password must contain number", "passwordMustContainSpecialCharacter": "Password must contain special character", + "passwordMustContainUppercaseLetter": "Password must contain uppercase letter", "passwordsDoNotMatch": "Passwords do not match", - "selectTokensToExportHelpTitle": "Is your token not listed?", - "selectTokensToExportHelpContent": "If a token is not listed, it is not guaranteed that it is not a privacyIDEA token.\nCurrently only manually added and imported tokens are exportable.", - "findingQrCodeInImage": "Looking for QR code in image...", - "qrNotFound": "No QR code found!", + "patchNotesBugFixes": "Bug fixes", + "patchNotesDialogTitle": "What's new?", + "patchNotesImprovements": "Improvements", + "patchNotesNewFeatures": "New features", + "patchNotesV4_3_0NewFeatures1": "Support for importing tokens from Google, Aegis and 2FAS Authenticator has been added. More import sources will be added in the future.", + "patchNotesV4_3_0NewFeatures2": "Added feedback option to the settings.", + "patchNotesV4_3_0NewFeatures3": "Push tokens can now be hidden from the token list.", + "patchNotesV4_3_0NewFeatures4": "Introductions have been added to help new users get started.", + "patchNotesV4_3_0NewFeatures5": "You can now search for tokens by tapping the magnifying glass in the upper right corner.", + "patchNotesV4_3_0NewFeatures6": "Added HomeWidget token for Android 12 and later.", + "patchNotesV4_3_1BugFix1": "Fixed an issue where the otp value was not displayed after authentication on some devices.", + "patchNotesV4_3_1Improvement1": "Improved the qr code scanner.", + "patchNotesV4_4_0Improvement1": "Further import sources have been added.", + "patchNotesV4_4_0Improvement2": "Improved recognition of QR codes from image files.", + "patchNotesV4_4_0NewFeatures1": "It is now possible to export tokens where it can be ensured that they are not privacyIDEA tokens. Currently, it cannot be ruled out that tokens added via the QR code scanner originate from privacyIDEA. The differentiation will be improved in future versions.", + "patchNotesV4_4_0NewFeatures2": "Added support for privacyIDEA's \"require presence\"", + "period": "Period", + "phonePart": "Phone part:", + "pleaseEnterANameForThisToken": "Please enter a name for this token.", + "pleaseEnterASecretForThisToken": "Please enter a secret for this token.", + "pleaseSyncManuallyWhenNetworkIsAvailable": "Please synchronize the push tokens manually via the settings when a network connection is available.", + "pollingChallenges": "Polling for new challenges", + "pollingFailed": "Polling failed.", + "pollingFailedFor": "Polling failed for {serial}", + "privacyPolicy": "Privacy policy", + "publicKey": "Public Key", + "pushEndpointUrl": "Push endpoint URL", + "pushRequestParseError": "Push request could not be parsed.", + "pushToken": "Push Token", + "pushTokens": "Push Tokens", + "qrFileDecodeError": "It was not possible to decode the QR code from the selected image, please use the QR code scanner instead.", "qrInFileNotFound": "No QR code was found in the selected image.", "qrInFileNotFound2": "You can show me where the QR code is located.", "qrInFileNotFound3": "I expect i will find the code if it is in the middle of the marked area.", - "markQrCode": "Mark QR Code", - "malformedData": "Malformed data", - "failedToLoad": "Failed to load: \"{name}\"", - "@failedToLoad": { - "placeholders": { - "name": { - "example": "token data" - } - } - }, - "internalServerError": "Internal server error ({code})", - "@internalServerError": { - "placeholders": { - "code": { - "example": "500" - } - } - }, + "qrNotFound": "No QR code found!", + "qrScan": "Scan", + "rename": "Rename", + "renameToken": "Rename token", + "renameTokenFolder": "Rename folder", + "requestInfo": "Sent by {issuer} for your account: \"{account}\"", + "requestPushChallengesPeriodically": "Request push challenges from the server periodically. Enable this if push challenges are not received normally.", + "requestTriggerdByUserQuestion": "Was this request triggered by you?", + "retryRollout": "Retry rollout", + "rolloutCompleted": "Rollout completed", + "save": "Save", + "scanQrCode": "Scan QR-Code", + "scanThisQrWithNewDevice": "Scan this QR code with your new device to import the token.", + "searchTokens": "Search tokens", + "secretIsRequired": "Secret is required", + "secretKey": "Secret key", + "selectFile": "Select file", + "selectImportSource": "Select import source", + "selectImportType": "How do you want to import the tokens?", + "selectTokensToExport": "{count, plural, zero{} one{Select token to export} other{Select tokens to export}}", + "selectTokensToExportHelpContent": "If a token is not listed, it is not guaranteed that it is not a privacyIDEA token.\nCurrently only manually added and imported tokens are exportable.", + "selectTokensToExportHelpTitle": "Is your token not listed?", + "send": "Send", + "sendErrorDialogBody": "An unexpected error occurred in the application. The information below can be send to the developers by email to help prevent this error in the future.", + "sendErrorLogDescription": "A predefined email is created.\nIt contains information about the app, the error and the device.\nYou can edit the email before sending it.\nYou can see here how we use the information:", + "sendPushRequestResponseFailed": "Failed to send the response.", + "sendingRSAPublicKey": "Sending public RSA key", + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "serverNotReachable": "The server could not be reached.", + "settings": "Settings", + "settingsGroupGeneral": "General", + "showDetails": "Show details", + "showErrorLog": "Show", + "showPrivacyPolicy": "Show privacy policy", + "signInTitle": "Authentication required", + "someTokensDoNotSupportPolling": "Some of the tokens are outdated and do not support polling", + "startRollout": "Start rollout", + "statusCode": "Status code: {statusCode}", + "sync": "Sync", + "syncContainerFailed": "Container synchronization failed", + "syncFbTokenFailed": "Synchronization failed for the following tokens, please try again:", + "synchronizePushTokens": "Synchronize push tokens", + "synchronizesTokensWithServer": "Synchronizes tokens with the privacyIDEA server.", + "synchronizingTokens": "Synchronizing tokens.", + "theSecretDoesNotFitTheCurrentEncoding": "The secret does not fit the current encoding", + "themeMode": "Theme mode", + "thisAppIsOpenSource": "This Application is Open Source\nVisit us on GitHub", "timeOut": "Time out", - "syncContainerFailed": "Failed to synchronize container", - "handshakeFailed" : "Handshake failed", - "checkServerCertificate": "Please check the server certificate" + "tokenDataParseError": "Token data could not be parsed", + "tokenDetails": "Token details", + "tokenLink": "Token link", + "tokenSerial": "Token serial", + "tokensAreEncrypted": "The tokens are encrypted. Please enter the password to decrypt them.", + "tokensDoNotSupportSynchronization": "The following tokens do not support synchronization and must be rolled out again:", + "tokensNotEncrypted": "The tokens are not encrypted and can be imported directly.", + "tokensSuccessfullyDecrypted": "The tokens have been successfully decrypted and can now be imported.", + "type": "Type", + "unexpectedError": "An unexpected error occurred.", + "unknown": "Unknown", + "unlock": "Unlock", + "unsupported": "The {name} [{value}] is not supported by this version of the app.", + "useDeviceLocaleDescription": "Use device language if it is supported, otherwise default to english.", + "useDeviceLocaleTitle": "Use device language", + "validFor": "Valid for", + "validUntil": "Valid until", + "valueNotAllowed": "The {type} \"{value}\" is not an allowed value for \"{parameter}\"", + "valueNotAllowedIn": "The {type} \"{value}\" is not an allowed value for \"{parameter}\" in \"{map}\"", + "verboseLogging": "Verbose logging", + "version": "Version", + "wrongPassword": "Incorrect password", + "yes": "Yes" } \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index f9e36e3dc..d558b1ab3 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -1,377 +1,362 @@ { - "@@last_modified": "2023-08-07", - "patchNotesNewFeatures": "Nuevas características", - "patchNotesImprovements": "Mejoras", - "patchNotesBugFixes": "Corrección de errores", - "patchNotesV4_4_0NewFeatures1": "Ahora es posible exportar tokens cuando se puede garantizar que no son tokens de privacyIDEA. Actualmente, no se puede descartar que los tokens añadidos a través del escáner de código QR procedan de privacyIDEA. La diferenciación se mejorará en futuras versiones.", - "patchNotesV4_4_0NewFeatures2": "Añadido soporte para privacyIDEA's \"require presence\".", - "patchNotesV4_4_0Improvement1": "Se han añadido más fuentes de importación.", - "patchNotesV4_4_0Improvement2": "Se ha mejorado el reconocimiento de códigos QR a partir de archivos de imagen.", - "patchNotesV4_3_1BugFix1": "Se ha corregido un problema donde el valor OTP no se mostraba después de la autenticación en algunos dispositivos.", - "patchNotesV4_3_1Improvement1": "Se ha mejorado el escáner de códigos QR.", - "patchNotesV4_3_0NewFeatures1": "Añadido soporte para importar tokens de Google, Aegis y 2FAS Authenticator. En el futuro se añadirán más fuentes de importación", - "patchNotesV4_3_0NewFeatures2": "Añadida opción de feedback a los ajustes", - "patchNotesV4_3_0NewFeatures3": "Los tokens push ahora se pueden ocultar de la lista de tokens", - "patchNotesV4_3_0NewFeatures4": "Se han añadido introducciones para ayudar a los nuevos usuarios a empezar", - "patchNotesV4_3_0NewFeatures5": "Ahora puedes buscar tokens tocando la lupa de la esquina superior derecha", - "patchNotesV4_3_0NewFeatures6": "Añadido Token HomeWidget para Android 12 y posteriores", - "guide": "guía", - "@guide": { - "description": "Button to open the guide screen." - }, - "retry": "Reintentar", - "@retry": { - "description": "Label for e.g. a button. Something is tried to be done again." - }, - "accept": "Aceptar", + "@@last_modified": "2024-09-20", + "@@locale": "es", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." }, - "decline": "Negar", - "@decline": { - "description": "Label for e.g. a button. Something gets declined by the user." - }, - "name": "Nombre", - "@name": { - "description": "Describes the field where the tokens name should be entered." - }, - "secretKey": "Clave secreta", - "@secretKey": { - "description": "Describes the field where the tokens secret should be entered." - }, - "encoding": "Codificación", - "@encoding": { - "description": "Title of the dropdown button where the encoding is selected." + "@addToken": { + "description": "The button to open the screen to add tokens by hand." }, - "algorithm": "Algorithmo", "@algorithm": { "description": "Title of the dropdown button where the encoding is selected." }, - "digits": "Dígitos", - "@digits": { - "description": "Title of the dropdown button where the number of digits for the opt value is selected." + "@algorithmUnsupported": { + "placeholders": { + "algorithm": { + "example": "MD5" + } + } }, - "type": "Tipo", - "@type": { - "description": "Title of the dropdown button where the type of the token is selected." + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." }, - "period": "Periodo", - "@period": { - "description": "Title of the dropdown button where the period of the totp token is selected." + "@authNotSupportedBody": { + "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." }, - "rename": "Renombrar", - "@rename": { - "description": "Label that describes renaming the token." + "@authNotSupportedTitle": { + "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." }, - "cancel": "Anular", - "@cancel": { - "description": "Button to cancel an action." + "@authToAcceptPushRequest": { + "description": "Message to accepting a push request for authentication." }, - "delete": "Borrar", - "@delete": { - "description": "Label that describes deleting the token." + "@authToDeclinePushRequest": { + "description": "Message for declining a push request for authentication." }, - "dismiss": "Desestimar", - "@dismiss": { - "description": "Text of a button that closes a dialog." + "@authenticateToShowOtp": { + "description": "Reason to authenticate when trying to view a one time password." }, - "addToken": "Añadir token", - "@addToken": { - "description": "The button to open the screen to add tokens by hand." + "@authenticateToUnLockToken": { + "description": "Reason to authenticate when trying to lock or unlock a token." }, - "scanQrCode": "Escanear código QR", - "@scanQrCode": { - "description": "The button to scan otpauth qr-codes." + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, - "enterDetailsForToken": "Introduzca los datos de el token", - "@enterDetailsForToken": { - "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." + "@biometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterANameForThisToken": "Introduzca un nombre para este token.", - "@pleaseEnterANameForThisToken": { - "description": "Hint telling the user to enter a name for a token." + "@biometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterASecretForThisToken": "Por favor, introduzca un secreto para este token.", - "@pleaseEnterASecretForThisToken": { - "description": "Hint telling the user to enter a secret for a token." + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, - "theSecretDoesNotFitTheCurrentEncoding": "El secreto no se ajusta a la codificación actual", - "@theSecretDoesNotFitTheCurrentEncoding": { - "description": "Hint telling the user that the secret does not fit the selected encoding." + "@cancel": { + "description": "Button to cancel an action." }, - "renameToken": "Renombrar token", - "@renameToken": { - "description": "Title of the dialog where a new name for a token can be entered." + "@checkServerCertificate": { + "description": "Error message when the server certificate should be checked." + }, + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "@clearErrorLog": { + "description": "Button to clear the error log." }, - "confirmDeletion": "Confiem supresión", "@confirmDeletion": { "description": "Title of the dialog where a token can be deleted." }, - "confirmDeletionOf": "¿Está seguro de que desea eliminar {name}?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", "placeholders": { "name": { "example": "PUSH1234" } - } - }, - "confirmTokenDeletionHint": "Es posible que ya no pueda iniciar sesión si elimina este token.\nAsegúrese de que puede iniciar sesión en la cuenta asociada sin este token.", - "@confirmTokenDeletionHint": { - "description": "Gives the user a hint about the consequences of deleting a token." + }, + "type": "text" }, - "confirmFolderDeletionHint": "Eliminar una carpeta no afecta a los tokens que contiene.\nLos tokens se mueven a la lista principal.", "@confirmFolderDeletionHint": { "description": "Gives the user a hint about the consequences of deleting a folder." }, - "generatingPhonePart": "Generar parte telefónico", - "@generatingPhonePart": { - "description": "Title of a dialog telling the user that the phone part gets generated right now." + "@confirmTokenDeletionHint": { + "description": "Gives the user a hint about the consequences of deleting a token." }, - "phonePart": "Pieza de teléfono:", - "@phonePart": { - "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + "@connectionFailed": { + "description": "Tells the user that the connection failed." }, - "otpValueCopiedMessage": "Contraseña \"{otpValue}\" copiada en el portapapeles.", - "@otpValueCopiedMessage": { - "description": "Tells the user that the otp value was copied to the clipboard.", - "placeholders": { - "otpValue": { - "example": "055374" - } - } + "@container": { + "description": "Title for the container view." }, - "settings": "Configuración", - "@settings": { - "description": "Button to open the settings page." + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." }, - "pushToken": "Push Token", - "@pushToken": { - "description": "Title for the settings block concerning the push tokens." + "@counter": { + "description": "Describes the field where the tokens counter should be entered." }, - "theme": "Tema", - "@theme": { - "description": "Title of the setting group where the theme can be selected." + "@createdAt": { + "description": "Label for the creation date of the token." }, - "lightTheme": "Luminoso", - "@lightTheme": { - "description": "The light theme." + "@creator": { + "description": "Label for the creator of the token." }, - "darkTheme": "Negro", "@darkTheme": { "description": "The dark theme." }, - "systemTheme": "Utilizar el tema del teléfono", - "@systemTheme": { - "description": "The systems theme." + "@decline": { + "description": "Label for e.g. a button. Something gets declined by the user." }, - "someTokensDoNotSupportPolling": "Algunos tokens están obsoletos y no admiten la consulta activa para la autenticación mediante mensaje push.", - "@someTokensDoNotSupportPolling": { - "description": "Tells the user, that the following tokens do not support polling.", - "type": "text", - "placeholders": {} + "@delete": { + "description": "Label that describes deleting the token." }, - "enablePolling": "Activar polling", - "@enablePolling": { - "description": "Name of the setting switch that enables polling." + "@deviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." }, - "requestPushChallengesPeriodically": "Solicita retos push al servidor periódicamente. Habilite esta opción si los retos push no se reciben normalmente.", - "@requestPushChallengesPeriodically": { - "description": "The description of the polling feature." + "@deviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." }, - "synchronizePushTokens": "Sinchronizar push tokens", - "@synchronizePushTokens": { - "description": "Title of synchronizing push tokens in settings." + "@digits": { + "description": "Title of the dropdown button where the number of digits for the opt value is selected." }, - "synchronizesTokensWithServer": "Sinchronizar tokens con el privacyIDEA servidor.", - "@synchronizesTokensWithServer": { - "description": "Description of synchronizing push tokens in settings." + "@dismiss": { + "description": "Text of a button that closes a dialog." }, - "sync": "Sinchronizar", - "@sync": { - "description": "Text of button that is used to synchronize push tokens." + "@enablePolling": { + "description": "Name of the setting switch that enables polling." }, - "synchronizingTokens": "Sincronización de los tokens.", - "@synchronizingTokens": { - "description": "Title of the push synchronization dialog." + "@encoding": { + "description": "Title of the dropdown button where the encoding is selected." }, - "allTokensSynchronized": "Todas los tokens están sincronizadas.", - "@allTokensSynchronized": { - "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + "@enterDetailsForToken": { + "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." }, - "syncFbTokenFailed": "La sincronización ha fallado para los siguientes tokens, por favor inténtelo de nuevo:", - "@syncFbTokenFailed": { - "description": "Headline for the list of tokens where the synchronization failed." + "@errorLogCleared": { + "description": "Message that tells the user that the error log was cleared." }, - "tokensDoNotSupportSynchronization": "Las siguientes tokens no admiten la sincronización y deben volver a desplegarse:", - "@tokensDoNotSupportSynchronization": { - "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + "@errorLogEmpty": { + "description": "Message that tells the user that the error log is empty." + }, + "@errorLogTitle": { + "description": "Title of the error log screen." + }, + "@errorMailBody": { + "description": "Message for email body" }, - "errorRollOutFailed": "Error en la extracción de el token {name}.", "@errorRollOutFailed": { "description": "Tells the user that the token could not be rolled out, because a network error occurred.", "placeholders": { "name": { "example": "PUSH1234A" } - } + }, + "type": "text" }, - "statusCode": "Código de estado: {statusCode}", - "@statusCode": { - "description": "Tells the user the status code of the error.", + "@errorRollOutNoConnectionToServer": { + "description": "Message for the rollout process", "placeholders": { - "statusCode": { - "example": "400" + "name": { + "example": "PUSH1234A" } } }, - "errorSynchronizationNoNetworkConnection": "Error al sincronizar los tokens. No se ha podido acceder al servidor de PrivacyIDEA.", - "@errorSynchronizationNoNetworkConnection": { - "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." }, - "errorRollOutUnknownError": "An unknown error occurred. Roll-out not possible: {e}", "@errorRollOutUnknownError": { "description": "Tells the user that the roll-out failed because of an unknown error.", "placeholders": { "e": { "example": "IllegalArgumentException on Line 5 ..." } - } - }, - "startRollout": "Iniciar despliegue", - "@startRollout": { - "description": "Label that tells the user that the token is being rolled out." + }, + "type": "text" }, - "pollingChallenges": "Sondeo para nuevos challenges", - "@pollingChallenges": { - "placeholders": {} + "@errorSynchronizationNoNetworkConnection": { + "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, - "unexpectedError": "Se ha producido un error inesperado.", - "@unexpectedError": { - "description": "Title of page report mode." + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "pollingFailed": "Consulta fallida.", - "@pollingFailed": { - "description": "Tells the user that the polling failed." + "@errorUnlinkingPushToken": { + "description": "Error message when unlinking a push token failed.", + "placeholders": { + "label": { + "example": "PUSH1234A" + } + } }, - "pollingFailedFor": "Fallo de sondeo para {serial}", - "@pollingFailedFor": { - "description": "Tells the user that the polling failed.", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", "placeholders": { - "serial": { + "name": { "example": "PUSH1234A" } } }, - "noNetworkConnection": "No hay conexión a la red.", - "@noNetworkConnection": { - "description": "Tells the user that there is no network connection." + "@failedToLoad": { + "placeholders": { + "name": { + "example": "token data" + } + } }, - "connectionFailed": "Conexión fallida.", - "@connectionFailed": { - "description": "Tells the user that the connection failed." + "@feedbackPrivacyPolicy2": { + "description": "Taping on this should open the privacy policy." }, - "checkYourNetwork": "Compruebe su conexión de red e inténtelo de nuevo.", - "@checkYourNetwork": { - "description": "Tells the user to check the network connection." + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." }, - "serverNotReachable": "No se ha podido acceder al servidor.", - "@serverNotReachable": { - "description": "Tells the user that the server could not be reached." + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" }, - "couldNotSignMessage": "No se ha podido firmar el mensaje.", - "@couldNotSignMessage": { - "description": "Tells the user that the message could not be signed." + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" }, - "useDeviceLocaleTitle": "Utiliza el idioma del teléfono", - "@useDeviceLocaleTitle": { - "description": "Title of the switch tile where using the devices language can be enabled." + "@goToSettingsButton": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." }, - "useDeviceLocaleDescription": "Utilizar el idioma del dispositivo si está soportado, en caso contrario por defecto inglés.", - "@useDeviceLocaleDescription": { - "description": "Description of the switch tile where using the devices language can be enabled." + "@goToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." }, - "language": "Language", - "@language": { - "description": "Título del grupo de configuración lingüística." + "@guide": { + "description": "Button to open the guide screen." }, - "authenticateToShowOtp": "Por favor, autentifíquese para mostrar la contraseña de una sola vez.", - "@authenticateToShowOtp": { - "description": "Reason to authenticate when trying to view a one time password." + "@handshakeFailed": { + "description": "Error message when the handshake failed." }, - "authenticateToUnLockToken": "Por favor, autentifíquese para cambiar el estado de bloqueo del token.", - "@authenticateToUnLockToken": { - "description": "Reason to authenticate when trying to lock or unlock a token." + "@importedVia": { + "description": "Label for the import method of the token." }, - "biometricRequiredTitle": "Biometría no configurada", - "@biometricRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + "@internalServerError": { + "placeholders": { + "code": { + "example": "500" + } + } }, - "biometricHint": "AAutenticación necesaria", - "@biometricHint": { - "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + "@invalidValue": { + "description": "Error message when the value is not valid for the parameter.", + "placeholders": { + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "biometricNotRecognized": "No reconocido. Inténtelo de nuevo.", - "@biometricNotRecognized": { - "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + "@invalidValueIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "biometricSuccess": "Autenticación correcta", - "@biometricSuccess": { - "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + "@isExpotableQuestion": { + "description": "Label for the question if the token is exportable." }, - "deviceCredentialsRequiredTitle": "No se han configurado las credenciales del dispositivo.", - "@deviceCredentialsRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + "@isPiTokenQuestion": { + "description": "Label for the question if the token is a privacyIDEA token." }, - "deviceCredentialsSetupDescription": "Configurar las credenciales del dispositivo en los ajustes del dispositivo", - "@deviceCredentialsSetupDescription": { - "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + "@language": { + "description": "Title of language setting group." }, - "signInTitle": "Autenticación necesaria", - "@signInTitle": { - "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + "@legacySigningErrorMessage": { + "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." }, - "goToSettingsButton": "Ir a la configuración", - "@goToSettingsButton": { - "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + "@legacySigningErrorTitle": { + "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "placeholders": { + "tokenLabel": { + "example": "PUSH1234A" + } + } }, - "goToSettingsDescription": "La autenticación por credenciales o biométrica no está configurada en tu dispositivo. Por favor, configúrala en los ajustes del dispositivo.", - "@goToSettingsDescription": { - "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." + "@lightTheme": { + "description": "The light theme." + }, + "@linkedContainer": { + "description": "Label for the linked container serial number." + }, + "@lock": { + "description": "Description of button that locks a token." }, - "lockOut": "La autenticación biométrica está desactivada. Bloquea y desbloquea la pantalla para activarla.", "@lockOut": { "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." }, - "authNotSupportedTitle": "Se requieren credenciales de dispositivo o datos biométricos", - "@authNotSupportedTitle": { - "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." + "@logMenu": { + "description": "Button to open the log menu." }, - "authNotSupportedBody": "Esta acción requiere que el dispositivo esté protegido mediante credenciales o datos biométricos.", - "@authNotSupportedBody": { - "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." + "@malformedData": { + "description": "Error message when the data is malformed." }, - "lock": "Cierre", - "@lock": { - "description": "Description of button that locks a token." + "@missingRequiredParameter": { + "description": "Error message when a required parameter is missing.", + "placeholders": { + "parameter": { + "example": "counter" + } + } }, - "unlock": "Desbloquear", - "@unlock": { - "description": "Description of button that unlocks a token." + "@missingRequiredParameterIn": { + "description": "Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.", + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + } + } }, - "noResultTitle": "Aún no hay tokens almacenadas.", - "@noResultTitle": { - "description": "No tokens stored yet." + "@mustNotBeEmpty": { + "placeholders": { + "field": { + "example": "Name" + } + } + }, + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "@noFbToken": { + "description": "Tells the user that there is no Firebase token available." + }, + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." }, - "noResultText1": "Indique el ", "@noResultText1": { "description": "first no result text" }, - "noResultText2": " para empezar.", "@noResultText2": { "description": "second no result text" }, - "onBoardingTitle1": "{appName}", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "@notAnInteger": { + "description": "Tells the user that there is no Firebase token available." + }, + "@notAnNumber": { + "description": "Error message when the user entered a value that is not a number." + }, + "@ok": { + "description": "Button to confirm an action." + }, "@onBoardingTitle1": { "placeholders": { "appName": { @@ -379,296 +364,558 @@ } } }, - "onBoardingText1": "Autenticación de dos factores\nmuy fácil", - "onBoardingTitle2": "Máxima seguridad", - "onBoardingText2": "Almacena fichas de forma segura en tu teléfono.\nProtegido por tus datos biométricos.", - "onBoardingTitle3": "Visítenos en Github", - "onBoardingText3": "Esta aplicación es de código abierto", - "errorLogTitle": "Registro de errores", - "logMenu": "Menú de registro", - "showErrorLog": "Mostrar", - "clearErrorLog": "Borrar", - "send": "Enviar", - "sendErrorLogDescription": "Se crea un correo electrónico listo.\nContiene información sobre la app, el error y el dispositivo.\nPuedes editar el correo antes de enviarlo.\nAquí puede ver cómo utilizamos la información:", - "@sendErrorLogDescription": { - "description": "Explanation for the user what he will send." + "@open": { + "description": "Button to open something." }, - "showPrivacyPolicy": "Mostrar política de privacidad", - "errorLogEmpty": "El registro de errores está vacío", - "verboseLogging": "Registro detallado", - "errorLogCleared": "Registro de errores borrado", - "ok": "Ok", - "errorMailBody": "Se adjunta el archivo de registro de errores.\nPuede sustituir este texto por información adicional sobre el error.", - "@errorMailBody": { - "description": "Message for email body" + "@originApp": { + "description": "Label for the origin app." }, - "showDetails": "Mostrar detalles", - "open": "Abrir", - "sendErrorDialogBody": "Se ha producido un error inesperado en la aplicación. La siguiente información puede ser enviada a los desarrolladores por correo electrónico para ayudar a prevenir este error en el futuro.", - "@sendErrorDialogBody": { - "description": "Description shown to the user about what info the error report contains." + "@originDetails": { + "description": "Title of the origin details menu." }, - "noFbToken": "No hay token de Firebase.", - "firebaseToken": "Token de Firebase", - "noPublicKey": "No hay clave pública.", - "publicKey": "Clave pública", - "editToken": "Editar token", - "edit": "Editar", - "save": "Guardar", - "create": "Crear", - "validFor": "Válido para", - "validUntil": "Válido hasta", - "deleteLockedToken": "Por favor, autentíquese para eliminar el token bloqueado.", - "editLockedToken": "Por favor, autentíquese para editar el token bloqueado.", - "expandLockedFolder": "Por favor, autentifíquese para abrir la carpeta bloqueada.", - "renameTokenFolder": "Cambiar nombre de carpeta", - "addANewFolder": "Crear nueva carpeta", - "folderName": "Nombre de la carpeta", - "retryRollout": "Reintentar despliegue", - "generatingRSAKeyPair": "Generando par de claves RSA", - "@generatingRSAKeyPair": { - "description": "Message for the rollout process" + "@otpValueCopiedMessage": { + "description": "Tells the user that the otp value was copied to the clipboard.", + "placeholders": { + "otpValue": { + "example": "055374" + } + }, + "type": "text" }, - "generatingRSAKeyPairFailed": "Error al generar el par de claves RSA", - "@generatingRSAKeyPairFailed": { + "@parsingResponse": { "description": "Message for the rollout process" }, - "sendingRSAPublicKey": "Enviando clave pública RSA", - "@sendingRSAPublicKey": { + "@parsingResponseFailed": { "description": "Message for the rollout process" }, - "sendingRSAPublicKeyFailed": "Error al enviar la clave pública RSA", - "@sendingRSAPublicKeyFailed": { - "description": "Message for the rollout process" + "@period": { + "description": "Title of the dropdown button where the period of the totp token is selected." }, - "parsingResponse": "Analizando la respuesta", - "@parsingResponse": { - "description": "Message for the rollout process" + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "parsingResponseFailed": "Error al analizar la respuesta", - "@parsingResponseFailed": { - "description": "Message for the rollout process" + "@pleaseEnterANameForThisToken": { + "description": "Hint telling the user to enter a name for a token." }, - "rolloutCompleted": "Despliegue completado", - "@rolloutCompleted": { - "description": "Message for the rollout process" + "@pleaseEnterASecretForThisToken": { + "description": "Hint telling the user to enter a secret for a token." }, - "errorRollOutNoConnectionToServer": "El despliegue del token {name} ha fallado, no se ha podido acceder al servidor.", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process", + "@pollingChallenges": { + "type": "text" + }, + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", "placeholders": { - "name": { + "serial": { "example": "PUSH1234A" } } }, - "authToAcceptPushRequest": "Por favor, autentifíquese para aceptar la solicitud push.", - "authToDeclinePushRequest": "Por favor, autentifíquese para rechazar la solicitud push.", - "pushRequestParseError": "No se ha podido procesar la solicitud push.", - "imageUrl": "URL de la imagen", - "errorRollOutSSLHandshakeFailed": "Ha fallado el protocolo SSL. No es posible el despliegue.", - "errorWhenPullingChallenges": "Se ha producido un error al buscar retos de {name}", - "@errorWhenPullingChallenges": { + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "@rename": { + "description": "Label that describes renaming the token." + }, + "@renameToken": { + "description": "Title of the dialog where a new name for a token can be entered." + }, + "@renameTokenFolder": { + "description": "Title of the dialog where a new name for a token folder can be entered." + }, + "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { - "name": { - "example": "PUSH1234A" + "account": { + "example": "GitHub" + }, + "issuer": { + "example": "privacyIDEA" } } }, - "couldNotConnectToServer": "No se ha podido conectar con el servidor.", - "errorRollOutNotPossibleAnymore": "El despliegue de este token ya no es posible.", - "errorTokenExpired": "El token {name} ha caducado.", - "@errorTokenExpired": { + "@requestPushChallengesPeriodically": { + "description": "The description of the polling feature." + }, + "@retry": { + "description": "Label for e.g. a button. Something is tried to be done again." + }, + "@rolloutCompleted": { + "description": "Message for the rollout process" + }, + "@scanQrCode": { + "description": "The button to scan otpauth qr-codes." + }, + "@secretIsRequired": { + "description": "Error message when the secret is missing." + }, + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "@send": { + "description": "Button to send the error log." + }, + "@sendErrorDialogBody": { + "description": "Description shown to the user about what info the error report contains." + }, + "@sendErrorLogDescription": { + "description": "Explanation for the user what he will send." + }, + "@sendPushRequestResponseFailed": { + "description": "Error message when the response to a push request could not be sent." + }, + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "@serverNotReachable": { + "description": "Tells the user that the server could not be reached." + }, + "@settings": { + "description": "Button to open the settings page." + }, + "@showDetails": { + "description": "Button to show details." + }, + "@showErrorLog": { + "description": "Button to show the error log." + }, + "@showPrivacyPolicy": { + "description": "Button to show the privacy policy." + }, + "@signInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "@someTokensDoNotSupportPolling": { + "description": "Tells the user, that the following tokens do not support polling.", + "type": "text" + }, + "@startRollout": { + "description": "Label that tells the user that the token is being rolled out." + }, + "@statusCode": { + "description": "Tells the user the status code of the error.", "placeholders": { - "name": { - "example": "PUSH1234A" + "statusCode": { + "example": "400" } } }, - "yes": "Sí", - "no": "No", - "butDiscardIt": "pero descártelo", - "declineIt": "rechazar", - "requestTriggerdByUserQuestion": "¿Fue usted quien provocó esta petición?", - "grantCameraPermissionDialogTitle": "El permiso de cámara no está concedido", - "grantCameraPermissionDialogContent": "Por favor, concede permiso a la cámara para escanear códigos QR", - "grantCameraPermissionDialogPermanentlyDenied": "El permiso de cámara está denegado permanentemente. Concede el permiso de cámara en la configuración del teléfono", - "grantCameraPermissionDialogButton": "Conceder permiso", - "decryptErrorTitle": "Error de descifrado", - "decryptErrorContent": "Lamentablemente, la aplicación no ha podido descifrar tus tokens. Esto indica que la clave de cifrado está rota. Puedes volver a intentarlo o borrar los datos de la app, lo que eliminaría los tokens de la app.", - "decryptErrorButtonDelete": "Borrar", - "decryptErrorButtonSendError": "Enviar error", - "decryptErrorButtonRetry": "Reintentar", - "decryptErrorDeleteConfirmationContent": "¿Estás seguro de que quieres borrar los datos de la aplicación?", - "hidePushTokens": "Ocultar tokens push", - "hidePushTokensDescription": "Ocultar tokens push de la lista de tokens. Esto no borrará los tokens y seguirán siendo visibles en una pantalla aparte", - "settingsGroupGeneral": "Información general", - "licensesAndVersion": "Licencias y versión", - "privacyPolicy": "Política de privacidad", - "introScanQrCode": "Puedes escanear códigos QR para añadir tokens.\nSoportamos todos los tokens comunes de Two-Factor-Authentication y también los tokens privacyIDEA", - "introAddTokenManually": "Si no quieres escanear un código QR, también puedes añadir tokens manualmente", - "introTokenSwipe": "Desliza los tokens hacia la izquierda para ver las acciones disponibles", - "introEditToken": "Aquí puedes editar el nombre del token y ver algunos detalles", - "introLockToken": "Para mejorar la seguridad aún más, puedes bloquear los tokens.\nEntonces el token sólo se puede utilizar después de la autenticación.", - "introDragToken": "Reorganiza tus tokens pulsándolo durante unos segundos y arrastrándolo a la posición deseada", - "introAddFolder": "Puedes crear carpetas\npara organizar tus tokens", - "introPollForChallenges": "Puedes buscar nuevos retos arrastrando hacia abajo la lista de tokens", - "introHidePushTokens": "Tus push tokens están ahora ocultos.\nPero puedes seguir viéndolos en la pantalla de push tokens.", - "legacySigningErrorTitle": "Se ha producido un error al utilizar el token obsoleto: {tokenLabel}", - "@legacySigningErrorTitle": { - "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "@syncContainerFailed": { + "description": "Error message when synchronizing a container failed." + }, + "@syncFbTokenFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "@systemTheme": { + "description": "The systems theme." + }, + "@theSecretDoesNotFitTheCurrentEncoding": { + "description": "Hint telling the user that the secret does not fit the selected encoding." + }, + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "@themeMode": { + "description": "Title of the setting group where the theme mode can be changed." + }, + "@timeOut": { + "description": "Error message when a request times out." + }, + "@tokenDataParseError": { + "description": "Error message when the token data could not be parsed." + }, + "@tokenDetails": { + "description": "Title of the token details menu." + }, + "@tokenSerial": { + "description": "Label for the token serial number." + }, + "@tokensDoNotSupportSynchronization": { + "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + }, + "@type": { + "description": "Title of the dropdown button where the type of the token is selected." + }, + "@unexpectedError": { + "description": "Title of page report mode." + }, + "@unknown": { + "description": "Tells that something is unknown." + }, + "@unlock": { + "description": "Description of button that unlocks a token." + }, + "@unsupported": { "placeholders": { - "tokenLabel": { - "example": "PUSH1234A" + "name": { + "example": "piauth version" + }, + "value": { + "example": "5" } } }, - "legacySigningErrorMessage": "El token se creó en una versión obsoleta de la aplicación, lo que puede provocar problemas al utilizarlo.\nSe recomienda crear un nuevo token push si el problema persiste.", - "@legacySigningErrorMessage": { - "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." + "@useDeviceLocaleDescription": { + "description": "Description of the switch tile where using the devices language can be enabled." }, - "selectImportSource": "Seleccionar fuente de importación", - "selectImportType": "Jak chcete importovat žetony?", - "importTokens": "Importar token", - "importNTokens": "{count, plural, zero{No importar tokens} one{Importar un token} other{Importar {count} tokens}}", - "selectFile": "Seleccionar archivo", - "decrypt": "Descifrar", - "tokensAreEncrypted": "Los tokens están encriptados. Por favor, introduce la contraseña para descifrarlos", - "tokensNotEncrypted": "Los tokens no están encriptados y se pueden importar directamente", - "tokensSuccessfullyDecrypted": "Los tokens se han descifrado correctamente y ya se pueden importar.", - "password": "Contraseña", - "wrongPassword": "Contraseña incorrecta", - "qrScan": "Escanear", - "enterLink": "Introducir enlace", - "invalidBackupFile": "El archivo seleccionado no es una copia de seguridad válida de {appName}", - "invalidQrScan": "El código QR escaneado no es una copia de seguridad válida de {appName}", - "invalidQrFile": "El archivo seleccionado no contiene un código QR válido de {appName}", - "invalidLink": "El enlace introducido no es un token válido de {appName}, o no es compatible", - "importFailedToken": "{count, plural, zero{No token Fallo al importar.} one{Error al importar un token.} other{Error al importar {count} tokens.}}", - "importExistingToken": "{count, plural, zero{No se ha encontrado ningún token que ya esté en la aplicación.} one{Se ha encontrado un token que ya existe en la aplicación.} other{Se han encontrado {count} tokens que ya están en la aplicación.}}", - "importConflictToken": "{count, plural, zero{No hay conflicto con tokens que ya existen.} one{Hay un conflicto con tokens que ya existen.\nPor favor, seleccione cuál le gustaría conservar.} other{Hay un conflicto con tokens que ya existen.\nPor favor, seleccione cuál le gustaría conservar.}}", - "importNewToken": "{count, plural, zero{No se ha encontrado ningún token nuevo.} one{Se ha encontrado un nuevo token que se puede importar.} other{Se han encontrado {count} nuevos tokens que se pueden importar.}}", - "importHintPrivacyIdeaQrScan": "Para crear códigos QR de las fichas, vaya a la configuración y pulse sobre \"Exportar\". A continuación, seleccione \"Como código QR\" y pulse sobre la ficha que desea exportar. Esta variante sólo es adecuada para la transferencia directa a otro dispositivo, ya que el código QR no está cifrado.", - "importHintPrivacyIdeaFile": "Para crear una copia de seguridad, vaya a los ajustes y pulse sobre \"Exportar\". Seleccione \"Como archivo\", seleccione los tokens que desea exportar. A continuación, pulse \"Exportar\" y establezca una contraseña. La ubicación de almacenamiento es la carpeta de descargas de su dispositivo.", - "importHint2FAS": "Seleccione su copia de seguridad de 2FAS. Si no tiene una copia de seguridad, cree una en la aplicación 2FAS. Le recomendamos que utilice una contraseña", - "importHintAegisBackupFile": "Seleccione su exportación de Aegis (.JSON).\nSi no tiene una exportación, cree una a través del menú de configuración en la app de Aegis. Se recomienda utilizar una contraseña", - "importHintAegisQrScan": "Escanea el código QR que recibes al transferir entradas desde Aegis", - "importHintAegisLink": "Introduzca el enlace que recibe al transferir entradas desde Aegis", - "importHintGoogleQrScan": "Escanea el código QR que recibes al exportar tus cuentas desde Google Authenticator", - "importHintGoogleQrFile": "Selecciona un archivo de imagen con el código QR que recibes al exportar tus cuentas desde Google Authenticator.\n!! Tenga en cuenta que no es seguro guardar el código QR en su dispositivo, ya que los tokens no están cifrados !!", - "importHintAuthenticatorProFile": "Para crear una copia de seguridad de la aplicación Authenticator Pro, vaya a la configuración y pulse en \"Copia de seguridad automática\". Seleccione una ubicación de almacenamiento y establezca una contraseña. A continuación, pulse \"Hacer copia de seguridad ahora\" para exportar los tokens.", - "importHintFreeOtpPlusQrScan": "Escanea el código QR que recibes al pulsar los tres puntos en el azulejo de la ficha y selecciona \"Compartir código QR\".", - "importHintFreeOtpPlusFile": "Para crear una copia de seguridad de la app FreeOTP+, pulse los tres puntos de la esquina superior derecha y seleccione \"Exportar\". Puede elegir entre los formatos JSON y URI. Recomendamos eliminar la copia de seguridad después de importarla, ya que no está cifrada.", - "qrFileDecodeError": "No fue posible decodificar el código QR de la imagen seleccionada, por favor utilice el escáner de código QR en su lugar.", - "tokenLink": "Enlace token", - "feedback": "Comentarios", - "feedbackTitle": "¡Tus comentarios son siempre bienvenidos!", - "feedbackDescription": "Si tienes alguna pregunta, sugerencia o problema, háznoslo saber", - "feedbackHint": "Se abrirá un correo electrónico preparado que podrá enviarnos. Si lo desea, se añadirá información sobre su dispositivo y la versión de la aplicación. Puede comprobar y editar el correo electrónico antes de enviarlo.", - "feedbackPrivacyPolicy1": "Al enviar sus comentarios, acepta nuestra ", - "feedbackPrivacyPolicy2": "política de privacidad", - "@feedbackPrivacyPolicy2": { - "description": "Taping on this should open the privacy policy." + "@useDeviceLocaleTitle": { + "description": "Title of the switch tile where using the devices language can be enabled." }, - "feedbackPrivacyPolicy3": ".", - "addSystemInfo": "Añadir información del sistema", - "feedbackSentTitle": "Comentarios enviados", - "feedbackSentDescription": "Muchas gracias por su ayuda para mejorar esta aplicación.", - "patchNotesDialogTitle": "¿Qué hay de nuevo?", - "version": "Versión", - "noMailAppTitle": "No hay aplicación de correo electrónico", - "noMailAppDescription": "No hay ninguna app de correo electrónico instalada o inicializada en este dispositivo, inténtalo de nuevo cuando puedas enviar un mensaje de correo electrónico.", - "authenticationRequest": "Autenticación", - "requestInfo": "Enviado por {issuer} para su cuenta: \"{account}\"", - "@requestInfo": { + "@valueNotAllowed": { "placeholders": { - "issuer": { - "example": "privacyIDEA" + "parameter": { + "example": "counter" }, - "account": { - "example": "GitHub" + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "errorUnlinkingPushToken": "Error al desvincular el token push {label}", - "@errorUnlinkingPushToken": { - "description": "Error message when unlinking a push token failed.", + "@valueNotAllowedIn": { "placeholders": { - "label": { - "example": "PUSH1234A" + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "pleaseSyncManuallyWhenNetworkIsAvailable": "Por favor, sincronice los tokens push manualmente a través de los ajustes cuando haya una conexión de red disponible.", - "pushTokens": "Push Tokens", - "continueButton": "Continue", - "addTokenManually": "Añadir token manualmente", + "@verboseLogging": { + "description": "Title of the switch tile where verbose logging can be enabled." + }, + "accept": "Aceptar", + "addANewFolder": "Crear nueva carpeta", "addFolder": "Añadir carpeta", - "searchTokens": "Buscar tokens", - "closeSearchTokens": "Cerrar búsqueda", - "increaseCounter": "Incrementar contador", - "copyOTPToClipboard": "Copiar OTP al portapapeles", - "licenses": "Licencias", - "optionalMessage": "Mensaje opcional", - "confirmation": "confirmación", - "askLogSendedDescription": "¿Ha enviado el registro y desea borrarlo ahora?", + "addSystemInfo": "Añadir información del sistema", + "addToken": "Añadir token", + "addTokenManually": "Añadir token manualmente", + "algorithm": "Algorithmo", "algorithmUnsupported": "El algoritmo {algorithm} no es compatible", - "@algorithmUnsupported": { - "placeholders": { - "algorithm": { - "example": "MD5" - } - } - }, - "thisAppIsOpenSource": "Esta aplicación es de código abierto\nVisítanos en GitHub", - "invalidArgument": "{argument} no es un valor válido para {type}", - "importExportTokens": "Importar/Exportar tokens", - "exportNonPrivacyIDEATokens": "Exportar tokens no privacyIDEA", - "selectTokensToExport": "{count, plural, zero{} one{Seleccionar token para exportar} other{Seleccionar tokens para exportar}}", - "noTokenToExport": "No hay token disponible para exportar", - "exportAllTokens": "Exportar todos los tokens", - "export": "Exportar", - "exportingTokens": "Exportando tokens...", - "exportTokens": "Exportar tokens", - "enterPasswordToEncrypt": "Ingrese una contraseña para cifrar los tokens. Esta contraseña será necesaria para importar los tokens.", - "exportLockedTokenReason": "Por favor, autentíquese para exportar tokens bloqueados.", - "fileSavedToDownloadsFolder": "Archivo guardado en la carpeta de descargas", - "errorSavingFile": "Error al guardar el archivo", - "asQrCode": "Como código QR", + "allTokensSynchronized": "Todas los tokens están sincronizadas.", "asFile": "Como archivo", - "scanThisQrWithNewDevice": "Escanee este código QR con su nuevo dispositivo para importar el token.", - "oneMore": "Uno más", - "done": "Hecho", - "confirmPassword": "Confirmar contraseña", + "asQrCode": "Como código QR", + "askLogSendedDescription": "¿Ha enviado el registro y desea borrarlo ahora?", + "authNotSupportedBody": "Esta acción requiere que el dispositivo esté protegido mediante credenciales o datos biométricos.", + "authNotSupportedTitle": "Se requieren credenciales de dispositivo o datos biométricos", + "authToAcceptPushRequest": "Por favor, autentifíquese para aceptar la solicitud push.", + "authToDeclinePushRequest": "Por favor, autentifíquese para rechazar la solicitud push.", + "authenticateToShowOtp": "Por favor, autentifíquese para mostrar la contraseña de una sola vez.", + "authenticateToUnLockToken": "Por favor, autentifíquese para cambiar el estado de bloqueo del token.", + "authenticationRequest": "Autenticación", + "biometricHint": "AAutenticación necesaria", + "biometricNotRecognized": "No reconocido. Inténtelo de nuevo.", + "biometricRequiredTitle": "Biometría no configurada", + "biometricSuccess": "Autenticación correcta", + "butDiscardIt": "pero descártelo", + "cancel": "Anular", + "checkServerCertificate": "Compruebe el certificado del servidor", + "checkYourNetwork": "Compruebe su conexión de red e inténtelo de nuevo.", + "clearErrorLog": "Borrar", + "closeSearchTokens": "Cerrar búsqueda", + "confirmDeletion": "Confiem supresión", + "confirmDeletionOf": "¿Está seguro de que desea eliminar {name}?", + "confirmFolderDeletionHint": "Eliminar una carpeta no afecta a los tokens que contiene.\nLos tokens se mueven a la lista principal.", + "confirmPassword": "Confirmar contraseña", + "confirmTokenDeletionHint": "Es posible que ya no pueda iniciar sesión si elimina este token.\nAsegúrese de que puede iniciar sesión en la cuenta asociada sin este token.", + "confirmation": "confirmación", + "connectionFailed": "Conexión fallida.", + "container": "Contenedor", + "continueButton": "Continue", + "copyOTPToClipboard": "Copiar OTP al portapapeles", + "couldNotConnectToServer": "No se ha podido conectar con el servidor.", + "couldNotSignMessage": "No se ha podido firmar el mensaje.", + "counter": "Contador", + "create": "Crear", + "createdAt": "Creado el", + "creator": "Creador", + "decline": "Negar", + "declineIt": "rechazar", + "decrypt": "Descifrar", + "decryptErrorButtonDelete": "Borrar", + "decryptErrorButtonRetry": "Reintentar", + "decryptErrorButtonSendError": "Enviar error", + "decryptErrorContent": "Lamentablemente, la aplicación no ha podido descifrar tus tokens. Esto indica que la clave de cifrado está rota. Puedes volver a intentarlo o borrar los datos de la app, lo que eliminaría los tokens de la app.", + "decryptErrorDeleteConfirmationContent": "¿Estás seguro de que quieres borrar los datos de la aplicación?", + "decryptErrorTitle": "Error de descifrado", + "delete": "Borrar", + "deleteLockedToken": "Por favor, autentíquese para eliminar el token bloqueado.", + "deviceCredentialsRequiredTitle": "No se han configurado las credenciales del dispositivo.", + "deviceCredentialsSetupDescription": "Configurar las credenciales del dispositivo en los ajustes del dispositivo", + "digits": "Dígitos", + "dismiss": "Desestimar", + "done": "Hecho", + "edit": "Editar", + "editLockedToken": "Por favor, autentíquese para editar el token bloqueado.", + "editToken": "Editar token", + "enablePolling": "Activar polling", + "encoding": "Codificación", + "enterDetailsForToken": "Introduzca los datos de el token", + "enterLink": "Introducir enlace", + "enterPasswordToEncrypt": "Ingrese una contraseña para cifrar los tokens. Esta contraseña será necesaria para importar los tokens.", + "errorLogCleared": "Registro de errores borrado", + "errorLogEmpty": "El registro de errores está vacío", + "errorLogTitle": "Registro de errores", + "errorMailBody": "Se adjunta el archivo de registro de errores.\nPuede sustituir este texto por información adicional sobre el error.", + "errorRollOutFailed": "Error en la extracción de el token {name}.", + "errorRollOutNoConnectionToServer": "El despliegue del token {name} ha fallado, no se ha podido acceder al servidor.", + "errorRollOutNotPossibleAnymore": "El despliegue de este token ya no es posible.", + "errorRollOutSSLHandshakeFailed": "Ha fallado el protocolo SSL. No es posible el despliegue.", + "errorRollOutUnknownError": "An unknown error occurred. Roll-out not possible: {e}", + "errorSavingFile": "Error al guardar el archivo", + "errorSynchronizationNoNetworkConnection": "Error al sincronizar los tokens. No se ha podido acceder al servidor de PrivacyIDEA.", + "errorTokenExpired": "El token {name} ha caducado.", + "errorUnlinkingPushToken": "Error al desvincular el token push {label}", + "errorWhenPullingChallenges": "Se ha producido un error al buscar retos de {name}", "exampleUrl": "Por favor, introduzca una URL válida como: \"https://example.com/\"", - "pushEndpointUrl": "URL del punto final push", + "expandLockedFolder": "Por favor, autentifíquese para abrir la carpeta bloqueada.", + "export": "Exportar", + "exportAllTokens": "Exportar todos los tokens", + "exportLockedTokenReason": "Por favor, autentíquese para exportar tokens bloqueados.", + "exportNonPrivacyIDEATokens": "Exportar tokens no privacyIDEA", + "exportTokens": "Exportar tokens", + "exportingTokens": "Exportando tokens...", + "failedToLoad": "Fallo al cargar:", + "feedback": "Comentarios", + "feedbackDescription": "Si tienes alguna pregunta, sugerencia o problema, háznoslo saber", + "feedbackHint": "Se abrirá un correo electrónico preparado que podrá enviarnos. Si lo desea, se añadirá información sobre su dispositivo y la versión de la aplicación. Puede comprobar y editar el correo electrónico antes de enviarlo.", + "feedbackPrivacyPolicy1": "Al enviar sus comentarios, acepta nuestra ", + "feedbackPrivacyPolicy2": "política de privacidad", + "feedbackPrivacyPolicy3": ".", + "feedbackSentDescription": "Muchas gracias por su ayuda para mejorar esta aplicación.", + "feedbackSentTitle": "Comentarios enviados", + "feedbackTitle": "¡Tus comentarios son siempre bienvenidos!", + "fileSavedToDownloadsFolder": "Archivo guardado en la carpeta de descargas", + "findingQrCodeInImage": "Buscando código QR en imagen...", + "firebaseToken": "Token de Firebase", + "folderName": "Nombre de la carpeta", + "generatingPhonePart": "Generar parte telefónico", + "generatingRSAKeyPair": "Generando par de claves RSA", + "generatingRSAKeyPairFailed": "Error al generar el par de claves RSA", + "goToSettingsButton": "Ir a la configuración", + "goToSettingsDescription": "La autenticación por credenciales o biométrica no está configurada en tu dispositivo. Por favor, configúrala en los ajustes del dispositivo.", + "grantCameraPermissionDialogButton": "Conceder permiso", + "grantCameraPermissionDialogContent": "Por favor, concede permiso a la cámara para escanear códigos QR", + "grantCameraPermissionDialogPermanentlyDenied": "El permiso de cámara está denegado permanentemente. Concede el permiso de cámara en la configuración del teléfono", + "grantCameraPermissionDialogTitle": "El permiso de cámara no está concedido", + "handshakeFailed": "Handshake fallido", + "hidePushTokens": "Ocultar tokens push", + "hidePushTokensDescription": "Ocultar tokens push de la lista de tokens. Esto no borrará los tokens y seguirán siendo visibles en una pantalla aparte", + "imageUrl": "URL de la imagen", + "importConflictToken": "{count, plural, zero{No hay conflicto con tokens que ya existen.} one{Hay un conflicto con tokens que ya existen.\nPor favor, seleccione cuál le gustaría conservar.} other{Hay un conflicto con tokens que ya existen.\nPor favor, seleccione cuál le gustaría conservar.}}", + "importExistingToken": "{count, plural, zero{No se ha encontrado ningún token que ya esté en la aplicación.} one{Se ha encontrado un token que ya existe en la aplicación.} other{Se han encontrado {count} tokens que ya están en la aplicación.}}", + "importExportTokens": "Importar/Exportar tokens", + "importFailedToken": "{count, plural, zero{No token Fallo al importar.} one{Error al importar un token.} other{Error al importar {count} tokens.}}", + "importHint2FAS": "Seleccione su copia de seguridad de 2FAS. Si no tiene una copia de seguridad, cree una en la aplicación 2FAS. Le recomendamos que utilice una contraseña", + "importHintAegisBackupFile": "Seleccione su exportación de Aegis (.JSON).\nSi no tiene una exportación, cree una a través del menú de configuración en la app de Aegis. Se recomienda utilizar una contraseña", + "importHintAegisLink": "Introduzca el enlace que recibe al transferir entradas desde Aegis", + "importHintAegisQrScan": "Escanea el código QR que recibes al transferir entradas desde Aegis", + "importHintAuthenticatorProFile": "Para crear una copia de seguridad de la aplicación Authenticator Pro, vaya a la configuración y pulse en \"Copia de seguridad automática\". Seleccione una ubicación de almacenamiento y establezca una contraseña. A continuación, pulse \"Hacer copia de seguridad ahora\" para exportar los tokens.", + "importHintFreeOtpPlusFile": "Para crear una copia de seguridad de la app FreeOTP+, pulse los tres puntos de la esquina superior derecha y seleccione \"Exportar\". Puede elegir entre los formatos JSON y URI. Recomendamos eliminar la copia de seguridad después de importarla, ya que no está cifrada.", + "importHintFreeOtpPlusQrScan": "Escanea el código QR que recibes al pulsar los tres puntos en el azulejo de la ficha y selecciona \"Compartir código QR\".", + "importHintGoogleQrFile": "Selecciona un archivo de imagen con el código QR que recibes al exportar tus cuentas desde Google Authenticator.\n!! Tenga en cuenta que no es seguro guardar el código QR en su dispositivo, ya que los tokens no están cifrados !!", + "importHintGoogleQrScan": "Escanea el código QR que recibes al exportar tus cuentas desde Google Authenticator", + "importHintPrivacyIdeaFile": "Para crear una copia de seguridad, vaya a los ajustes y pulse sobre \"Exportar\". Seleccione \"Como archivo\", seleccione los tokens que desea exportar. A continuación, pulse \"Exportar\" y establezca una contraseña. La ubicación de almacenamiento es la carpeta de descargas de su dispositivo.", + "importHintPrivacyIdeaQrScan": "Para crear códigos QR de las fichas, vaya a la configuración y pulse sobre \"Exportar\". A continuación, seleccione \"Como código QR\" y pulse sobre la ficha que desea exportar. Esta variante sólo es adecuada para la transferencia directa a otro dispositivo, ya que el código QR no está cifrado.", + "importNTokens": "{count, plural, zero{No importar tokens} one{Importar un token} other{Importar {count} tokens}}", + "importNewToken": "{count, plural, zero{No se ha encontrado ningún token nuevo.} one{Se ha encontrado un nuevo token que se puede importar.} other{Se han encontrado {count} nuevos tokens que se pueden importar.}}", + "importTokens": "Importar token", + "importedVia": "Importado a través de", + "increaseCounter": "Incrementar contador", + "internalServerError": "Error interno del servidor ({code})", + "introAddFolder": "Puedes crear carpetas\npara organizar tus tokens", + "introAddTokenManually": "Si no quieres escanear un código QR, también puedes añadir tokens manualmente", + "introDragToken": "Reorganiza tus tokens pulsándolo durante unos segundos y arrastrándolo a la posición deseada", + "introEditToken": "Aquí puedes editar el nombre del token y ver algunos detalles", + "introHidePushTokens": "Tus push tokens están ahora ocultos.\nPero puedes seguir viéndolos en la pantalla de push tokens.", + "introLockToken": "Para mejorar la seguridad aún más, puedes bloquear los tokens.\nEntonces el token sólo se puede utilizar después de la autenticación.", + "introPollForChallenges": "Puedes buscar nuevos retos arrastrando hacia abajo la lista de tokens", + "introScanQrCode": "Puedes escanear códigos QR para añadir tokens.\nSoportamos todos los tokens comunes de Two-Factor-Authentication y también los tokens privacyIDEA", + "introTokenSwipe": "Desliza los tokens hacia la izquierda para ver las acciones disponibles", + "invalidBackupFile": "El archivo seleccionado no es una copia de seguridad válida de {appName}", + "invalidLink": "El enlace introducido no es un token válido de {appName}, o no es compatible", + "invalidQrFile": "El archivo seleccionado no contiene un código QR válido de {appName}", + "invalidQrScan": "El código QR escaneado no es una copia de seguridad válida de {appName}", + "invalidValue": "untranslated", + "invalidValueIn": "untranslated", + "isExpotableQuestion": "¿Es exportable?", + "isPiTokenQuestion": "¿Es un token de privacyIDEA?", + "language": "Language", + "legacySigningErrorMessage": "El token se creó en una versión obsoleta de la aplicación, lo que puede provocar problemas al utilizarlo.\nSe recomienda crear un nuevo token push si el problema persiste.", + "legacySigningErrorTitle": "Se ha producido un error al utilizar el token obsoleto: {tokenLabel}", + "licenses": "Licencias", + "licensesAndVersion": "Licencias y versión", + "linkedContainer": "Contenedor vinculado", + "lock": "Cierre", + "lockOut": "La autenticación biométrica está desactivada. Bloquea y desbloquea la pantalla para activarla.", + "logMenu": "Menú de registro", + "malformedData": "Datos mal formados", + "markQrCode": "Marcar código QR", + "missingRequiredParameter": "El valor del parámetro [{parameter}] es obligatorio, pero falta.", + "missingRequiredParameterIn": "El valor del parámetro [{parameter}] es obligatorio, pero falta en \"{map}\".", "mustNotBeEmpty": "{field} no debe estar vacío", - "@mustNotBeEmpty": { - "placeholders": { - "field": { - "example": "Name" - } - } - }, - "sendPushRequestResponseFailed": "No se ha podido enviar la respuesta.", - "@sendPushRequestResponseFailed": { - "description": "Error message when the response to a push request could not be sent." - }, + "name": "Nombre", + "no": "No", + "noFbToken": "No hay token de Firebase.", + "noMailAppDescription": "No hay ninguna app de correo electrónico instalada o inicializada en este dispositivo, inténtalo de nuevo cuando puedas enviar un mensaje de correo electrónico.", + "noMailAppTitle": "No hay aplicación de correo electrónico", + "noNetworkConnection": "No hay conexión a la red.", + "noPublicKey": "No hay clave pública.", + "noResultText1": "Indique el ", + "noResultText2": " para empezar.", + "noResultTitle": "Aún no hay tokens almacenadas.", + "noTokenToExport": "No hay token disponible para exportar", + "notAnInteger": "El valor no es un entero.", + "notAnNumber": "El valor no es un número.", + "ok": "Ok", + "oneMore": "Uno más", + "open": "Abrir", + "optionalMessage": "Mensaje opcional", + "originApp": "Aplicación Origen", + "originDetails": "Datos de origen", + "otpValueCopiedMessage": "Contraseña \"{otpValue}\" copiada en el portapapeles.", + "parsingResponse": "Analizando la respuesta", + "parsingResponseFailed": "Error al analizar la respuesta", + "password": "Contraseña", "passwordCannotBeEmpty": "La contraseña no puede estar vacía", - "passwordMustBeAtLeast8Characters": "La contraseña debe tener al menos 8 caracteres", "passwordCannotContainWhitespace": "La contraseña no puede contener espacios en blanco", + "passwordMustBeAtLeast8Characters": "La contraseña debe tener al menos 8 caracteres", "passwordMustContainLowercaseLetter": "La contraseña debe contener una letra minúscula", - "passwordMustContainUppercaseLetter": "La contraseña debe contener una letra mayúscula", "passwordMustContainNumber": "La contraseña debe contener un número", "passwordMustContainSpecialCharacter": "La contraseña debe contener un carácter especial", + "passwordMustContainUppercaseLetter": "La contraseña debe contener una letra mayúscula", "passwordsDoNotMatch": "Las contraseña no coinciden", - "selectTokensToExportHelpTitle": "¿Su ficha no figura en la lista?", - "selectTokensToExportHelpContent": "Si un token no aparece en la lista, no se garantiza que no sea un token privacyIDEA.\nActualmente sólo se pueden exportar los tokens añadidos manualmente y los importados.", - "findingQrCodeInImage": "Buscando código QR en imagen...", - "qrNotFound": "No se ha encontrado ningún código QR.", + "patchNotesBugFixes": "Corrección de errores", + "patchNotesDialogTitle": "¿Qué hay de nuevo?", + "patchNotesImprovements": "Mejoras", + "patchNotesNewFeatures": "Nuevas características", + "patchNotesV4_3_0NewFeatures1": "Añadido soporte para importar tokens de Google, Aegis y 2FAS Authenticator. En el futuro se añadirán más fuentes de importación", + "patchNotesV4_3_0NewFeatures2": "Añadida opción de feedback a los ajustes", + "patchNotesV4_3_0NewFeatures3": "Los tokens push ahora se pueden ocultar de la lista de tokens", + "patchNotesV4_3_0NewFeatures4": "Se han añadido introducciones para ayudar a los nuevos usuarios a empezar", + "patchNotesV4_3_0NewFeatures5": "Ahora puedes buscar tokens tocando la lupa de la esquina superior derecha", + "patchNotesV4_3_0NewFeatures6": "Añadido Token HomeWidget para Android 12 y posteriores", + "patchNotesV4_3_1BugFix1": "Se ha corregido un problema donde el valor OTP no se mostraba después de la autenticación en algunos dispositivos.", + "patchNotesV4_3_1Improvement1": "Se ha mejorado el escáner de códigos QR.", + "patchNotesV4_4_0Improvement1": "Se han añadido más fuentes de importación.", + "patchNotesV4_4_0Improvement2": "Se ha mejorado el reconocimiento de códigos QR a partir de archivos de imagen.", + "patchNotesV4_4_0NewFeatures1": "Ahora es posible exportar tokens cuando se puede garantizar que no son tokens de privacyIDEA. Actualmente, no se puede descartar que los tokens añadidos a través del escáner de código QR procedan de privacyIDEA. La diferenciación se mejorará en futuras versiones.", + "patchNotesV4_4_0NewFeatures2": "Añadido soporte para privacyIDEA's \"require presence\".", + "period": "Periodo", + "phonePart": "Pieza de teléfono:", + "pleaseEnterANameForThisToken": "Introduzca un nombre para este token.", + "pleaseEnterASecretForThisToken": "Por favor, introduzca un secreto para este token.", + "pleaseSyncManuallyWhenNetworkIsAvailable": "Por favor, sincronice los tokens push manualmente a través de los ajustes cuando haya una conexión de red disponible.", + "pollingChallenges": "Sondeo para nuevos challenges", + "pollingFailed": "Consulta fallida.", + "pollingFailedFor": "Fallo de sondeo para {serial}", + "privacyPolicy": "Política de privacidad", + "publicKey": "Clave pública", + "pushEndpointUrl": "URL del punto final push", + "pushRequestParseError": "No se ha podido procesar la solicitud push.", + "pushToken": "Push Token", + "pushTokens": "Push Tokens", + "qrFileDecodeError": "No fue posible decodificar el código QR de la imagen seleccionada, por favor utilice el escáner de código QR en su lugar.", "qrInFileNotFound": "No se ha encontrado ningún código QR en la imagen seleccionada.", "qrInFileNotFound2": "Puedes mostrarme dónde está el código QR.", "qrInFileNotFound3": "Espero encontrar el código si está en el centro del área marcada.", - "markQrCode": "Marcar código QR", - "malformedData": "Datos mal formados" + "qrNotFound": "No se ha encontrado ningún código QR.", + "qrScan": "Escanear", + "rename": "Renombrar", + "renameToken": "Renombrar token", + "renameTokenFolder": "Cambiar nombre de carpeta", + "requestInfo": "Enviado por {issuer} para su cuenta: \"{account}\"", + "requestPushChallengesPeriodically": "Solicita retos push al servidor periódicamente. Habilite esta opción si los retos push no se reciben normalmente.", + "requestTriggerdByUserQuestion": "¿Fue usted quien provocó esta petición?", + "retry": "Reintentar", + "retryRollout": "Reintentar despliegue", + "rolloutCompleted": "Despliegue completado", + "save": "Guardar", + "scanQrCode": "Escanear código QR", + "scanThisQrWithNewDevice": "Escanee este código QR con su nuevo dispositivo para importar el token.", + "searchTokens": "Buscar tokens", + "secretIsRequired": "Se requiere secreto", + "secretKey": "Clave secreta", + "selectFile": "Seleccionar archivo", + "selectImportSource": "Seleccionar fuente de importación", + "selectImportType": "Jak chcete importovat žetony?", + "selectTokensToExport": "{count, plural, zero{} one{Seleccionar token para exportar} other{Seleccionar tokens para exportar}}", + "selectTokensToExportHelpContent": "Si un token no aparece en la lista, no se garantiza que no sea un token privacyIDEA.\nActualmente sólo se pueden exportar los tokens añadidos manualmente y los importados.", + "selectTokensToExportHelpTitle": "¿Su ficha no figura en la lista?", + "send": "Enviar", + "sendErrorDialogBody": "Se ha producido un error inesperado en la aplicación. La siguiente información puede ser enviada a los desarrolladores por correo electrónico para ayudar a prevenir este error en el futuro.", + "sendErrorLogDescription": "Se crea un correo electrónico listo.\nContiene información sobre la app, el error y el dispositivo.\nPuedes editar el correo antes de enviarlo.\nAquí puede ver cómo utilizamos la información:", + "sendPushRequestResponseFailed": "No se ha podido enviar la respuesta.", + "sendingRSAPublicKey": "Enviando clave pública RSA", + "sendingRSAPublicKeyFailed": "Error al enviar la clave pública RSA", + "serverNotReachable": "No se ha podido acceder al servidor.", + "settings": "Configuración", + "settingsGroupGeneral": "Información general", + "showDetails": "Mostrar detalles", + "showErrorLog": "Mostrar", + "showPrivacyPolicy": "Mostrar política de privacidad", + "signInTitle": "Autenticación necesaria", + "someTokensDoNotSupportPolling": "Algunos tokens están obsoletos y no admiten la consulta activa para la autenticación mediante mensaje push.", + "startRollout": "Iniciar despliegue", + "statusCode": "Código de estado: {statusCode}", + "sync": "Sinchronizar", + "syncContainerFailed": "Error en la sincronización de contenedores", + "syncFbTokenFailed": "La sincronización ha fallado para los siguientes tokens, por favor inténtelo de nuevo:", + "synchronizePushTokens": "Sinchronizar push tokens", + "synchronizesTokensWithServer": "Sinchronizar tokens con el privacyIDEA servidor.", + "synchronizingTokens": "Sincronización de los tokens.", + "theSecretDoesNotFitTheCurrentEncoding": "El secreto no se ajusta a la codificación actual", + "themeMode": "Tema", + "thisAppIsOpenSource": "Esta aplicación es de código abierto\nVisítanos en GitHub", + "timeOut": "Tiempo de espera", + "tokenDataParseError": "No se han podido analizar los datos del token.", + "tokenDetails": "Detalles de la token", + "tokenLink": "Enlace token", + "tokenSerial": "Token serial", + "tokensAreEncrypted": "Los tokens están encriptados. Por favor, introduce la contraseña para descifrarlos", + "tokensDoNotSupportSynchronization": "Las siguientes tokens no admiten la sincronización y deben volver a desplegarse:", + "tokensNotEncrypted": "Los tokens no están encriptados y se pueden importar directamente", + "tokensSuccessfullyDecrypted": "Los tokens se han descifrado correctamente y ya se pueden importar.", + "type": "Tipo", + "unexpectedError": "Se ha producido un error inesperado.", + "unknown": "Desconocido", + "unlock": "Desbloquear", + "unsupported": "{name} [{value}] no es compatible con esta versión de la aplicación.", + "useDeviceLocaleDescription": "Utilizar el idioma del dispositivo si está soportado, en caso contrario por defecto inglés.", + "useDeviceLocaleTitle": "Utiliza el idioma del teléfono", + "validFor": "Válido para", + "validUntil": "Válido hasta", + "valueNotAllowed": "untranslated", + "valueNotAllowedIn": "untranslated", + "verboseLogging": "Registro detallado", + "version": "Versión", + "wrongPassword": "Contraseña incorrecta", + "yes": "Sí" } \ No newline at end of file diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 47021be0e..8d2fea37d 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -1,381 +1,362 @@ { - "@@last_modified": "2023-08-07", - "patchNotesNewFeatures": "Nouvelles caractéristiques", - "patchNotesImprovements": "Améliorations", - "patchNotesBugFixes": "Bug fixes", - "patchNotesV4_4_0NewFeatures1": "Il est désormais possible d'exporter des jetons dont on peut s'assurer qu'il ne s'agit pas de jetons privacyIDEA. Actuellement, il n'est pas possible d'exclure que des jetons ajoutés via le lecteur de code QR proviennent de privacyIDEA. La différenciation sera améliorée dans les versions futures.", - "patchNotesV4_4_0NewFeatures2": "Ajout du support pour privacyIDEA's \"require presence\".", - "patchNotesV4_4_0Improvement1": "D'autres sources d'importation ont été ajoutées.", - "patchNotesV4_4_0Improvement2": "La reconnaissance des codes QR à partir des fichiers image a été améliorée.", - "patchNotesV4_3_1BugFix1": "Un problème a été corrigé où la valeur OTP n'était pas affichée après l'authentification sur certains appareils.", - "patchNotesV4_3_1Improvement1": "Le scanner de codes QR a été amélioré.", - "patchNotesV4_3_0NewFeatures1": "Ajout de la prise en charge de l'importation de jetons depuis Google, Aegis et 2FAS Authenticator. D'autres sources d'importation seront ajoutées à l'avenir.", - "patchNotesV4_3_0NewFeatures2": "Ajout d'une option de retour d'information dans les paramètres", - "patchNotesV4_3_0NewFeatures3": "Les jetons de poussée peuvent maintenant être cachés de la liste des jetons", - "patchNotesV4_3_0NewFeatures4": "Des introductions ont été ajoutées pour aider les nouveaux utilisateurs à démarrer", - "patchNotesV4_3_0NewFeatures5": "Vous pouvez désormais rechercher des jetons en appuyant sur la loupe dans le coin supérieur droit", - "patchNotesV4_3_0NewFeatures6": "Ajout du jeton HomeWidget pour Android 12 et les versions ultérieures", - "guide": "Assistant", - "@guide": { - "description": "Button to open the guide screen." - }, - "retry": "Réessayer", - "@retry": { - "description": "Label for e.g. a button. Something is tried to be done again." - }, - "accept": "Accepter", + "@@last_modified": "2024-09-20", + "@@locale": "fr", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." }, - "decline": "Refuser", - "@decline": { - "description": "Label for e.g. a button. Something gets declined by the user." - }, - "name": "Nom", - "@name": { - "description": "Describes the field where the tokens name should be entered." - }, - "secretKey": "Clé secrète", - "@secretKey": { - "description": "Describes the field where the tokens secret should be entered." - }, - "encoding": "Encodage", - "@encoding": { - "description": "Title of the dropdown button where the encoding is selected." + "@addToken": { + "description": "The button to open the screen to add tokens by hand." }, - "algorithm": "Algorithme", "@algorithm": { "description": "Title of the dropdown button where the encoding is selected." }, - "digits": "Chiffres", - "@digits": { - "description": "Title of the dropdown button where the number of digits for the opt value is selected." + "@algorithmUnsupported": { + "placeholders": { + "algorithm": { + "example": "MD5" + } + } }, - "type": "Type", - "@type": { - "description": "Title of the dropdown button where the type of the token is selected." + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." }, - "period": "Période", - "@period": { - "description": "Title of the dropdown button where the period of the totp token is selected." + "@authNotSupportedBody": { + "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." }, - "rename": "Renommer", - "@rename": { - "description": "Label that describes renaming the token." + "@authNotSupportedTitle": { + "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." }, - "cancel": "Annuler", - "@cancel": { - "description": "Button to cancel an action." + "@authToAcceptPushRequest": { + "description": "Message to accepting a push request for authentication." }, - "delete": "Supprimer", - "@delete": { - "description": "Label that describes deleting the token." + "@authToDeclinePushRequest": { + "description": "Message for declining a push request for authentication." }, - "dismiss": "Fermer", - "@dismiss": { - "description": "Text of a button that closes a dialog." + "@authenticateToShowOtp": { + "description": "Reason to authenticate when trying to view a one time password." }, - "addToken": "Ajouter un jeton", - "@addToken": { - "description": "The button to open the screen to add tokens by hand." + "@authenticateToUnLockToken": { + "description": "Reason to authenticate when trying to lock or unlock a token." }, - "scanQrCode": "Numériser QR-Code", - "@scanQrCode": { - "description": "The button to scan otpauth qr-codes." + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, - "enterDetailsForToken": "Saisissez les détails du jeton", - "@enterDetailsForToken": { - "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." + "@biometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterANameForThisToken": "Veuillez saisir un nom pour ce jeton.", - "@pleaseEnterANameForThisToken": { - "description": "Hint telling the user to enter a name for a token." + "@biometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterASecretForThisToken": "Veuillez saisir un secret pour ce jeton.", - "@pleaseEnterASecretForThisToken": { - "description": "Hint telling the user to enter a secret for a token." + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, - "theSecretDoesNotFitTheCurrentEncoding": "Le secret n'est pas compatible avec \nl'encodage actuel.", - "@theSecretDoesNotFitTheCurrentEncoding": { - "description": "Hint telling the user that the secret does not fit the selected encoding." + "@cancel": { + "description": "Button to cancel an action." }, - "renameToken": "Renommer jeton", - "@renameToken": { - "description": "Title of the dialog where a new name for a token can be entered." + "@checkServerCertificate": { + "description": "Error message when the server certificate should be checked." + }, + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "@clearErrorLog": { + "description": "Button to clear the error log." }, - "confirmDeletion": "Confirmer suppression", "@confirmDeletion": { "description": "Title of the dialog where a token can be deleted." }, - "confirmDeletionOf": "Confirmer la suppression de {name}?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234" } - } - }, - "confirmTokenDeletionHint": "Il se peut que vous ne puissiez plus vous connecter si vous supprimez ce token.\nVeuillez vous assurer que vous pouvez vous connecter au compte associé sans ce token.", - "@confirmTokenDeletionHint": { - "description": "Gives the user a hint about the consequences of deleting a token." + }, + "type": "text" }, - "confirmFolderDeletionHint": "La suppression d'un dossier n'a aucun effet sur les tokens qui s'y trouvent.\nLes tokens sont déplacés dans la liste principale.", "@confirmFolderDeletionHint": { "description": "Gives the user a hint about the consequences of deleting a folder." }, - "generatingPhonePart": "Générer la part du téléphone", - "@generatingPhonePart": { - "description": "Title of a dialog telling the user that the phone part gets generated right now." + "@confirmTokenDeletionHint": { + "description": "Gives the user a hint about the consequences of deleting a token." }, - "phonePart": "Part du téléphone:", - "@phonePart": { - "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + "@connectionFailed": { + "description": "Tells the user that the connection failed." }, - "otpValueCopiedMessage": "Le mot de passe \"{otpValue}\" a été copié dans le presse-papier.", - "@otpValueCopiedMessage": { - "description": "Tells the user that the otp value was copied to the clipboard.", - "type": "text", - "placeholders": { - "otpValue": { - "example": "055374" - } - } + "@container": { + "description": "Title for the container view." }, - "settings": "Paramètres", - "@settings": { - "description": "Button to open the settings page." + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." }, - "pushToken": "Jeton de type Push", - "@pushToken": { - "description": "Title for the settings block concerning the push tokens." + "@counter": { + "description": "Describes the field where the tokens counter should be entered." }, - "theme": "Thème", - "@theme": { - "description": "Title of the setting group where the theme can be selected." + "@createdAt": { + "description": "Label for the creation date of the token." }, - "lightTheme": "Thème lumineux", - "@lightTheme": { - "description": "The light theme." + "@creator": { + "description": "Label for the creator of the token." }, - "darkTheme": "Thème sombre", "@darkTheme": { "description": "The dark theme." }, - "systemTheme": "Utiliser le thème de l'appareil", - "@systemTheme": { - "description": "The systems theme." + "@decline": { + "description": "Label for e.g. a button. Something gets declined by the user." }, - "someTokensDoNotSupportPolling": "Certains jetons sont obsolètes et ne supportent pas l'interrogation due serveur.", - "@someTokensDoNotSupportPolling": { - "description": "Tells the user, that the following tokens do not support polling.", - "type": "text", - "placeholders": {} + "@delete": { + "description": "Label that describes deleting the token." }, - "enablePolling": "Activer l'interrogation du serveur.", - "@enablePolling": { - "description": "Name of the setting switch that enables polling." + "@deviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." }, - "requestPushChallengesPeriodically": "Demander des challenges push depuis le serveur périodiquement. Activer cette fonction si les challenges push ne sont pas reçus normalement.", - "@requestPushChallengesPeriodically": { - "description": "The description of the polling feature." + "@deviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." }, - "synchronizePushTokens": "Synchoniser les jetons Push", - "@synchronizePushTokens": { - "description": "Title of synchronizing push tokens in settings." + "@digits": { + "description": "Title of the dropdown button where the number of digits for the opt value is selected." }, - "synchronizesTokensWithServer": "Synchroniser les jetons Push avec le serveur privacyIDEA.", - "@synchronizesTokensWithServer": { - "description": "Description of synchronizing push tokens in settings." + "@dismiss": { + "description": "Text of a button that closes a dialog." }, - "sync": "Synchroniser", - "@sync": { - "description": "Text of button that is used to synchronize push tokens." + "@enablePolling": { + "description": "Name of the setting switch that enables polling." }, - "synchronizingTokens": "Synchroniser les jetons.", - "@synchronizingTokens": { - "description": "Title of the push synchronization dialog." + "@encoding": { + "description": "Title of the dropdown button where the encoding is selected." }, - "allTokensSynchronized": "Tous les jetons ont été synchronisés.", - "@allTokensSynchronized": { - "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + "@enterDetailsForToken": { + "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." }, - "syncFbTokenFailed": "La synchronisation a échoué pour ces jetons, veuillez reéssayer:", - "@syncFbTokenFailed": { - "description": "Headline for the list of tokens where the synchronization failed." + "@errorLogCleared": { + "description": "Message that tells the user that the error log was cleared." }, - "tokensDoNotSupportSynchronization": "Ces jetons ne supportent pas la synchronisation et doivent être de nouveau générés:", - "@tokensDoNotSupportSynchronization": { - "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + "@errorLogEmpty": { + "description": "Message that tells the user that the error log is empty." + }, + "@errorLogTitle": { + "description": "Title of the error log screen." + }, + "@errorMailBody": { + "description": "Message for email body" }, - "errorRollOutFailed": "Le déploiement du jeton {name} a échoué.", "@errorRollOutFailed": { "description": "Tells the user that the token could not be rolled out, because a network error occurred.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234A" } - } + }, + "type": "text" }, - "statusCode": "Code d'état : {statusCode}", - "@statusCode": { - "description": "Tells the user the status code of the error.", + "@errorRollOutNoConnectionToServer": { + "description": "Message for the rollout process", "placeholders": { - "statusCode": { - "example": "400" + "name": { + "example": "PUSH1234A" } } }, - "errorSynchronizationNoNetworkConnection": "La synchronization a échoué car le serveur est injoignable.", - "@errorSynchronizationNoNetworkConnection": { - "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." }, - "errorRollOutUnknownError": "Le déploiement a échoué suite à une erreur inconnue: {e}", "@errorRollOutUnknownError": { "description": "Tells the user that the roll-out failed because of an unknown error.", - "type": "text", "placeholders": { "e": { "example": "IllegalArgumentException on Line 5 ..." } - } - }, - "startRollout": "Démarrer le déploiement", - "@startRollout": { - "description": "Label that tells the user that the token is being rolled out." - }, - "pollingChallenges": "Vérification de nouveaux challenges", - "@pollingChallenges": { + }, "type": "text" }, - "unexpectedError": "Une erreur inattendue s'est produite.", - "@unexpectedError": { - "description": "Title of page report mode." - }, - "pollingFailed": "Échec de la requête.", - "@pollingFailed": { - "description": "Tells the user that the polling failed." + "@errorSynchronizationNoNetworkConnection": { + "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, - "pollingFailedFor": "Echec de la requête pour {serial}.", - "@pollingFailedFor": { - "description": "Tells the user that the polling failed.", + "@errorTokenExpired": { "placeholders": { - "serial": { + "name": { "example": "PUSH1234A" } } }, - "noNetworkConnection": "Pas de connexion au réseau.", - "@noNetworkConnection": { - "description": "Tells the user that there is no network connection." + "@errorUnlinkingPushToken": { + "description": "Error message when unlinking a push token failed.", + "placeholders": { + "label": { + "example": "PUSH1234A" + } + } }, - "connectionFailed": "La connexion a échoué.", - "@connectionFailed": { - "description": "Tells the user that the connection failed." + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "checkYourNetwork": "Veuillez vérifier votre connexion réseau et réessayer.", - "@checkYourNetwork": { - "description": "Tells the user to check the network connection." + "@failedToLoad": { + "placeholders": { + "name": { + "example": "token data" + } + } }, - "serverNotReachable": "Le serveur n'a pas pu être atteint.", - "@serverNotReachable": { - "description": "Tells the user that the server could not be reached." + "@feedbackPrivacyPolicy2": { + "description": "Taping on this should open the privacy policy." }, - "couldNotSignMessage": "Impossible de signer le message.", - "@couldNotSignMessage": { - "description": "Tells the user that the message could not be signed." + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." }, - "useDeviceLocaleTitle": "Utiliser la langue de l'appareil", - "@useDeviceLocaleTitle": { - "description": "Title of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" }, - "useDeviceLocaleDescription": "Utilisez la langue de l'appareil si elle est prise en charge, sinon l'anglais par défaut.", - "@useDeviceLocaleDescription": { - "description": "Description of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" }, - "language": "Langue", - "@language": { - "description": "Title of language setting group." + "@goToSettingsButton": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." }, - "authenticateToShowOtp": "Veuillez vous authentifier pour afficher un mot de passe à usage unique.", - "@authenticateToShowOtp": { - "description": "Reason to authenticate when trying to view a one time password." + "@goToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." }, - "authenticateToUnLockToken": "Veuillez vous authentifier pour modifier l'état de verrouillage du jeton.", - "@authenticateToUnLockToken": { - "description": "Reason to authenticate when trying to lock or unlock a token." + "@guide": { + "description": "Button to open the guide screen." }, - "biometricRequiredTitle": "La biométrie n'est pas configurée", - "@biometricRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + "@handshakeFailed": { + "description": "Error message when the handshake failed." }, - "biometricHint": "Authentification requise", - "@biometricHint": { - "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + "@importedVia": { + "description": "Label for the import method of the token." }, - "biometricNotRecognized": "Pas reconnu. Réessayer.", - "@biometricNotRecognized": { - "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + "@internalServerError": { + "placeholders": { + "code": { + "example": "500" + } + } }, - "biometricSuccess": "Authentification réussie", - "@biometricSuccess": { - "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + "@invalidValue": { + "description": "Error message when the value is not valid for the parameter.", + "placeholders": { + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsRequiredTitle": "Les informations d'identification de l'appareil ne sont pas configurées", - "@deviceCredentialsRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + "@invalidValueIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsSetupDescription": "Configurer les informations d'identification de l'appareil dans les paramètres de l'appareil", - "@deviceCredentialsSetupDescription": { - "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + "@isExpotableQuestion": { + "description": "Label for the question if the token is exportable." }, - "signInTitle": "Authentification requise", - "@signInTitle": { - "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + "@isPiTokenQuestion": { + "description": "Label for the question if the token is a privacyIDEA token." }, - "goToSettingsButton": "Aller aux paramètres", - "@goToSettingsButton": { - "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + "@language": { + "description": "Title of language setting group." }, - "goToSettingsDescription": "L'authentification par identifiants ou biométrie n'est pas configurée sur votre appareil. Veuillez le configurer dans les paramètres de l'appareil.", - "@goToSettingsDescription": { - "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." + "@legacySigningErrorMessage": { + "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." }, - "lockOut": "L'authentification biométrique est désactivée. Veuillez verrouiller et déverrouiller votre écran pour l'activer.", - "@lockOut": { - "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + "@legacySigningErrorTitle": { + "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "placeholders": { + "tokenLabel": { + "example": "PUSH1234A" + } + } }, - "authNotSupportedTitle": "Informations d'identification de l'appareil ou données biométriques requises", - "@authNotSupportedTitle": { - "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." + "@lightTheme": { + "description": "The light theme." }, - "authNotSupportedBody": "Cette action nécessite que l'appareil soit sécurisé par des identifiants ou des données biométriques.", - "@authNotSupportedBody": { - "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." + "@linkedContainer": { + "description": "Label for the linked container serial number." }, - "lock": "Bloquer", "@lock": { "description": "Description of button that locks a token." }, - "unlock": "Ouvrir", - "@unlock": { - "description": "Description of button that unlocks a token." + "@lockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." }, - "noResultTitle": "Aucun jeton n'est encore stocké.", - "@noResultTitle": { - "description": "No tokens stored yet." + "@logMenu": { + "description": "Button to open the log menu." + }, + "@malformedData": { + "description": "Error message when the data is malformed." + }, + "@missingRequiredParameter": { + "description": "Error message when a required parameter is missing.", + "placeholders": { + "parameter": { + "example": "counter" + } + } + }, + "@missingRequiredParameterIn": { + "description": "Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.", + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + } + } + }, + "@mustNotBeEmpty": { + "placeholders": { + "field": { + "example": "Name" + } + } + }, + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "@noFbToken": { + "description": "Tells the user that there is no Firebase token available." + }, + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." }, - "noResultText1": "Appuyez sur le \n", "@noResultText1": { "description": "first noresult text" }, - "noResultText2": "bouton pour commencer!", "@noResultText2": { "description": "second noresult text" }, - "onBoardingTitle1": "{appName}", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "@notAnInteger": { + "description": "Tells the user that there is no Firebase token available." + }, + "@notAnNumber": { + "description": "Error message when the user entered a value that is not a number." + }, + "@ok": { + "description": "Button to confirm an action." + }, "@onBoardingTitle1": { "placeholders": { "appName": { @@ -383,297 +364,558 @@ } } }, - "onBoardingText1": "Authentification à deux facteurs\nrendue facile", - "onBoardingTitle2": "Sécurité Maximale", - "onBoardingText2": "Stockez les jetons sur votre \nappareil en toute sécurité\nProtégé par votre biométrie", - "onBoardingTitle3": "Rendez-nous visite sur Github", - "onBoardingText3": "Cette application est open source", - "errorLogTitle": "Journal d'erreur", - "logMenu": "Menu du journal", - "showErrorLog": "Afficher", - "clearErrorLog": "Effacer", - "send": "Envoyer", - "sendErrorLogDescription": "Un e-mail pré-rempli est créé.\nIl contient des informations sur l'application, l'erreur et le périphérique.\nVous pouvez modifier l'e-mail avant de l'envoyer.\nVous pouvez voir ici comment nous utilisons les informations:", - "@sendErrorLogDescription": { - "description": "Explanation for the user what he will send." - }, - "showPrivacyPolicy": "Afficher la déclaration de confidentialité", - "errorLogEmpty": "Le journal des erreurs est vide", - "verboseLogging": "Journalisation verbeuse", - "errorLogCleared": "Journal d'erreur nettoyé", - "ok": "Ok", - "errorMailBody": "Le fichier journal des erreurs est joint.\nVous pouvez remplacer ce texte par des informations supplémentaires sur l'erreur.", - "@errorMailBody": { - "description": "Message pour le corps du courriel" - }, - "showDetails": "Afficher les détails", - "open": "Ouvrir", - "sendErrorDialogBody": "Une erreur inattendue est survenue dans l'application. L'information suivante peut être transmise aux développeurs par email afin d'aider à corriger cette erreur dans le futur.", - "@sendErrorDialogBody": { - "description": "Description shown to the user about what info the error report contains." - }, - "noFbToken": "Pas de jeton Firebase", - "firebaseToken": "Jeton Firebase", - "noPublicKey": "Pas de clé publique", - "publicKey": "Clé publique", - "editToken": "Modifier le jeton", - "edit": "Modifier", - "save": "Enregistrer", - "create": "créer", - "validFor": "Valide pour", - "validUntil": "Valide jusqu'à", - "deleteLockedToken": "Veuillez vous authentifier pour supprimer le jeton verrouillé.", - "editLockedToken": "Veuillez vous authentifier pour modifier le jeton verrouillé.", - "expandLockedFolder": "Veuillez vous authentifier pour ouvrir le dossier verrouillé.", - "renameTokenFolder": "Renommer le dossier", - "addANewFolder": "Créer un nouveau dossier", - "folderName": "Nom du dossier", - "retryRollout": "Réessayer le déploiement", - "generatingRSAKeyPair": "Génération de la paire de clés RSA", - "@generatingRSAKeyPair": { - "description": "Message for the rollout process" + "@open": { + "description": "Button to open something." }, - "generatingRSAKeyPairFailed": "La génération de la paire de clés RSA a échoué", - "@generatingRSAKeyPairFailed": { - "description": "Message for the rollout process" + "@originApp": { + "description": "Label for the origin app." }, - "sendingRSAPublicKey": "Envoi de la clé publique RSA", - "@sendingRSAPublicKey": { - "description": "Message for the rollout process" + "@originDetails": { + "description": "Title of the origin details menu." }, - "sendingRSAPublicKeyFailed": "L'envoi de la clé publique RSA a échoué", - "@sendingRSAPublicKeyFailed": { - "description": "Message for the rollout process" + "@otpValueCopiedMessage": { + "description": "Tells the user that the otp value was copied to the clipboard.", + "placeholders": { + "otpValue": { + "example": "055374" + } + }, + "type": "text" }, - "parsingResponse": "Analyse de la réponse", "@parsingResponse": { "description": "Message for the rollout process" }, - "parsingResponseFailed": "L'analyse de la réponse a échoué", "@parsingResponseFailed": { "description": "Message for the rollout process" }, - "rolloutCompleted": "Déploiement terminé", - "@rolloutCompleted": { - "description": "Message for the rollout process" + "@period": { + "description": "Title of the dropdown button where the period of the totp token is selected." }, - "errorRollOutNoConnectionToServer": "El despliegue del token {name} ha fallado, no se ha podido acceder al servidor.", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process" + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "authToAcceptPushRequest": "Veuillez vous authentifier pour accepter la demande de connexion.", - "@authToAcceptPushRequest": { - "description": "authToAcceptPushRequest" + "@pleaseEnterANameForThisToken": { + "description": "Hint telling the user to enter a name for a token." }, - "authToDeclinePushRequest": "Veuillez vous authentifier pour refuser la demande de connexion.", - "@authToDeclinePushRequest": { - "description": "authToDeclinePushRequest" + "@pleaseEnterASecretForThisToken": { + "description": "Hint telling the user to enter a secret for a token." }, - "pushRequestParseError": "La demande push n'a pas pu être traitée.", - "imageUrl": "URL de l'image", - "errorRollOutSSLHandshakeFailed": "Échec de la prise de contact SSL. Le déploiement n'est pas possible.", - "errorWhenPullingChallenges": "Une erreur s'est produite lors de l'interrogation des défis de {name}", - "@errorWhenPullingChallenges": { - "placeholders": { - "name": { - "example": "PUSH1234A" - } - } + "@pollingChallenges": { + "type": "text" }, - "couldNotConnectToServer": "Impossible de se connecter au serveur.", - "errorRollOutNotPossibleAnymore": "Le déploiement de ce jeton n'est plus possible.", - "errorTokenExpired": "Le jeton {name} a expiré.", - "@errorTokenExpired": { + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", "placeholders": { - "name": { + "serial": { "example": "PUSH1234A" } } }, - "yes": "Oui", - "no": "Non", - "butDiscardIt": "mais l'écarter", - "declineIt": "refuser", - "requestTriggerdByUserQuestion": "Cette demande a-t-elle été déclenchée par vous ?", - "grantCameraPermissionDialogTitle": "L'autorisation de la caméra n'est pas accordée", - "grantCameraPermissionDialogContent": "Veuillez accorder à la caméra l'autorisation de scanner les codes QR", - "grantCameraPermissionDialogPermanentlyDenied": "L'autorisation de l'appareil photo est refusée de manière permanente. Veuillez accorder l'autorisation à l'appareil photo dans les paramètres de votre téléphone.", - "grantCameraPermissionDialogButton": "Accorder l'autorisation", - "decryptErrorTitle": "Erreur de décryptage", - "decryptErrorContent": "Malheureusement, l'application n'a pas pu décrypter vos jetons. Cela indique que la clé de cryptage est cassée. Vous pouvez réessayer ou supprimer les données de l'application, ce qui supprimera les jetons dans l'application.", - "decryptErrorButtonDelete": "Supprimer", - "decryptErrorButtonSendError": "Erreur d'envoi", - "decryptErrorButtonRetry": "Réessayer", - "decryptErrorDeleteConfirmationContent": "Êtes-vous sûr de vouloir supprimer les données de l'application ?", - "hidePushTokens": "Hide push tokens", - "hidePushTokensDescription": "Masquer les jetons de poussée de la liste des jetons. Cela ne supprimera pas les jetons et ils seront toujours visibles sur un écran séparé", - "settingsGroupGeneral": "Généralités", - "licensesAndVersion": "Licences et version", - "privacyPolicy": "Politique de confidentialité", - "introScanQrCode": "You can scan QR codes to add tokens.\nWe support every common Two-Factor-Authentication token and also the privacyIDEA tokens.", - "introAddTokenManually": "Si vous ne souhaitez pas scanner un code QR, vous pouvez également ajouter des jetons manuellement.", - "introTokenSwipe": "Balayez les tokens vers la gauche pour voir les actions disponibles", - "introEditToken": "Ici, vous pouvez modifier le nom du token et voir quelques détails", - "introLockToken": "Pour améliorer encore la sécurité, vous pouvez verrouiller les tokens. Le token ne peut alors être utilisé qu'après l'authentification.", - "introDragToken": "Réorganisez vos jetons en appuyant dessus pendant quelques secondes, puis en les faisant glisser jusqu'à la position souhaitée", - "introAddFolder": "Vous pouvez créer des dossiers pour organiser vos jetons", - "introPollForChallenges": "Vous pouvez vérifier la présence de nouveaux défis en faisant glisser la liste des jetons vers le bas", - "introHidePushTokens": "Vos jetons sont maintenant cachés, mais vous pouvez toujours les voir sur l'écran des jetons", - "legacySigningErrorTitle": "Une erreur s'est produite lors de l'utilisation du jeton obsolète : {tokenLabel}", - "@legacySigningErrorTitle": { - "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", - "placeholders": { - "tokenLabel": { - "example": "PUSH1234A" - } - } + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." }, - "legacySigningErrorMessage": "Le token a été créé dans une version obsolète de l'application, ce qui peut entraîner des problèmes d'utilisation.\nIl est recommandé de créer un nouveau token push si le problème persiste !", - "@legacySigningErrorMessage": { - "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." + "@rename": { + "description": "Label that describes renaming the token." }, - "selectImportSource": "Sélectionner la source d'importation", - "selectImportType": "Comment voulez-vous importer les jetons ?", - "importTokens": "Importer un jeton", - "importNTokens": "{count, plural, zero{N'importer aucun jeton} one{Importer un jeton} other{Importer {count} tokens}}", - "selectFile": "Sélectionner un fichier", - "decrypt": "Décrypter", - "tokensAreEncrypted": "Les jetons sont cryptés. Veuillez saisir le mot de passe pour les décrypter", - "tokensNotEncrypted": "Les tokens ne sont pas cryptés, et peuvent être importés directement", - "tokensSuccessfullyDecrypted": "Les tokens ont été décryptés avec succès, ils peuvent maintenant être importés.", - "password": "Mot de passe", - "wrongPassword": "Mot de passe incorrect", - "qrScan": "Numériser", - "enterLink": "Saisir le lien", - "invalidBackupFile": "Le fichier sélectionné n'est pas une sauvegarde valide de {appName}", - "invalidQrScan": "Le code QR scanné n'est pas une sauvegarde valide de {appName}", - "invalidQrFile": "Le fichier sélectionné ne contient pas de code QR valide de {appName}", - "invalidLink": "Le lien saisi n'est pas un jeton valide de {appName}, ou il n'est pas pris en charge", - "importFailedToken": "{count, plural, zero{Pas de jeton Échec de l'importation.} one{Échec de l'importation d'un jeton.} other{Échec de l'importation des jetons {count}.}}", - "importExistingToken": "{count, plural, zero{Aucun jeton déjà présent dans l'application n'a été trouvé.} one{Un jeton qui existe déjà dans l'application a été trouvé.} other{Des jetons {count} déjà présents dans l'application ont été trouvés.}}", - "importConflictToken": "{count, plural, zero{Il n'y a pas de conflit avec des tokens déjà existants.} one{Il y a un conflit avec des tokens déjà existants.\nVeuillez choisir celui que vous voulez garder.} other{Il y a un conflit avec des tokens déjà existants.\nVeuillez choisir celui que vous voulez garder.}}", - "importNewToken": "{count, plural, zero{Aucun nouveau jeton n'a été trouvé.} one{Un nouveau token a été trouvé et peut être importé.} other{{count} nouveaux tokens ont été trouvés et peuvent être importés.}}", - "importHintPrivacyIdeaQrScan": "Pour créer des codes QR des jetons, accédez aux paramètres et appuyez sur \"Exporter\". Sélectionnez ensuite \"En tant que code QR\" et tapez sur le jeton à exporter. Cette variante ne convient que pour un transfert direct vers un autre appareil, car le code QR n'est pas crypté.", - "importHintPrivacyIdeaFile": "Pour créer une sauvegarde, allez dans les paramètres et tapez sur \"Exporter\". Choisissez \"En tant que fichier\", sélectionnez les jetons que vous souhaitez exporter. Ensuite, appuyez sur \"Exporter\" et définissez un mot de passe. L'emplacement de stockage est le dossier de téléchargement sur votre appareil.", - "importHint2FAS": "Choisissez votre sauvegarde 2FAS.\nSi vous n'avez pas de sauvegarde, créez-en une dans l'application 2FAS. Nous vous recommandons d'utiliser un mot de passe", - "importHintAegisBackupFile": "Choisissez votre exportation Aegis (.JSON).\nSi vous n'avez pas d'exportation, veuillez en créer une via le menu Paramètres dans l'application Aegis. Il est recommandé d'utiliser un mot de passe", - "importHintAegisQrScan": "Scannez le code QR que vous recevez lorsque vous transférez des entrées depuis Aegis", - "importHintAegisLink": "Saisissez le lien que vous recevez lorsque vous transférez des entrées depuis Aegis", - "importHintGoogleQrScan": "Scannez le code QR que vous recevez lorsque vous exportez vos comptes depuis Google Authenticator", - "importHintGoogleQrFile": "Sélectionnez un fichier image avec le code QR que vous obtenez lorsque vous exportez vos comptes depuis Google Authenticator.\n!! Notez qu'il n'est pas sûr d'enregistrer le code QR sur votre appareil, car les jetons ne sont pas cryptés !!", - "importHintAuthenticatorProFile": "Pour créer une sauvegarde de l'application Authenticator Pro, accédez aux paramètres et appuyez sur \"Sauvegarde automatique\". Sélectionnez un emplacement de stockage et définissez un mot de passe. Puis appuyez sur \"Sauvegarder maintenant\" pour exporter les tokens.", - "importHintFreeOtpPlusQrScan": "Scannez le code QR que vous recevez lorsque vous appuyez sur les trois points dans la tuile du jeton et sélectionnez \"Partager le code QR\".", - "importHintFreeOtpPlusFile": "Pour créer une sauvegarde de l'application FreeOTP+, appuyez sur les trois points dans le coin supérieur droit et sélectionnez \"Exporter\". Vous pouvez choisir entre les formats JSON et URI. Nous recommandons de supprimer la sauvegarde après l'avoir importée, car elle n'est pas cryptée.", - "qrFileDecodeError": "Il n'a pas été possible de décoder le code QR à partir de l'image sélectionnée, veuillez utiliser le scanner de code QR à la place", - "tokenLink": "Lien vers le token", - "feedback": "Retour d'information", - "feedbackTitle": "Vos commentaires sont toujours les bienvenus !", - "feedbackDescription": "Si vous avez des questions, des suggestions ou des problèmes, n'hésitez pas à nous en faire part", - "feedbackHint": "Un e-mail prêt à l'emploi s'ouvre, que vous pouvez nous envoyer. Si vous le souhaitez, des informations sur votre appareil et la version de l'application seront ajoutées. Vous pouvez vérifier et modifier l'e-mail avant de l'envoyer.", - "feedbackPrivacyPolicy1": "En envoyant le retour d'information, vous acceptez notre ", - "feedbackPrivacyPolicy2": "politique de confidentialité", - "@feedbackPrivacyPolicy2": { - "description": "Taping on this should open the privacy policy." + "@renameToken": { + "description": "Title of the dialog where a new name for a token can be entered." + }, + "@renameTokenFolder": { + "description": "Title of the dialog where a new name for a token folder can be entered." }, - "feedbackPrivacyPolicy3": ".", - "addSystemInfo": "Ajouter des informations sur le système", - "feedbackSentTitle": "Retour d'information envoyé", - "feedbackSentDescription": "Merci beaucoup pour votre aide dans l'amélioration de cette application !", - "patchNotesDialogTitle": "Quoi de neuf ?", - "version": "Version", - "noMailAppTitle": "Aucune application de messagerie trouvée", - "noMailAppDescription": "Aucune application de messagerie n'est installée ou initialisée sur cet appareil. Veuillez réessayer lorsque vous serez en mesure d'envoyer un message électronique.", - "authenticationRequest": "Authentification", - "requestInfo": "Envoyé par {issuer} pour votre compte : \"{account}\"", "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { - "issuer": { - "exemple": "privacyIDEA" - }, "account": { - "exemple": "GitHub" + "example": "GitHub" + }, + "issuer": { + "example": "privacyIDEA" } } }, - "errorUnlinkingPushToken": "Echec du découplage du push token {label}", - "@errorUnlinkingPushToken": { - "description": "Error message when unlinking a push token failed.", + "@requestPushChallengesPeriodically": { + "description": "The description of the polling feature." + }, + "@retry": { + "description": "Label for e.g. a button. Something is tried to be done again." + }, + "@rolloutCompleted": { + "description": "Message for the rollout process" + }, + "@scanQrCode": { + "description": "The button to scan otpauth qr-codes." + }, + "@secretIsRequired": { + "description": "Error message when the secret is missing." + }, + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "@send": { + "description": "Button to send the error log." + }, + "@sendErrorDialogBody": { + "description": "Description shown to the user about what info the error report contains." + }, + "@sendErrorLogDescription": { + "description": "Explanation for the user what he will send." + }, + "@sendPushRequestResponseFailed": { + "description": "Error message when the response to a push request could not be sent." + }, + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "@serverNotReachable": { + "description": "Tells the user that the server could not be reached." + }, + "@settings": { + "description": "Button to open the settings page." + }, + "@showDetails": { + "description": "Button to show details." + }, + "@showErrorLog": { + "description": "Button to show the error log." + }, + "@showPrivacyPolicy": { + "description": "Button to show the privacy policy." + }, + "@signInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "@someTokensDoNotSupportPolling": { + "description": "Tells the user, that the following tokens do not support polling.", + "type": "text" + }, + "@startRollout": { + "description": "Label that tells the user that the token is being rolled out." + }, + "@statusCode": { + "description": "Tells the user the status code of the error.", "placeholders": { - "label": { - "example": "PUSH1234A" + "statusCode": { + "example": "400" } } }, - "pleaseSyncManuallyWhenNetworkIsAvailable": "Veuillez synchroniser manuellement les jetons Push via les paramètres lorsqu'une connexion réseau est disponible", - "pushTokens": "Push Tokens", - "continueButton": "Continue", - "addTokenManually": "Add token manually", - "addFolder": "Ajouter un dossier", - "searchTokens": "Jetons de recherche", - "closeSearchTokens": "Fermer la recherche", - "increaseCounter": "Augmenter le compteur", - "copyOTPToClipboard": "Copier l'OTP dans le presse-papiers", - "licenses": "Licences", - "optionalMessage": "Message optionnel", - "confirmation": "Confirmation", - "askLogSendedDescription": "Avez-vous envoyé le journal et voulez-vous l'effacer maintenant ?", - "algorithmUnsupported": "L'algorithme {algorithm} n'est pas pris en charge", - "@algorithmUnsupported": { + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "@syncContainerFailed": { + "description": "Error message when synchronizing a container failed." + }, + "@syncFbTokenFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "@systemTheme": { + "description": "The systems theme." + }, + "@theSecretDoesNotFitTheCurrentEncoding": { + "description": "Hint telling the user that the secret does not fit the selected encoding." + }, + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "@themeMode": { + "description": "Title of the setting group where the theme mode can be changed." + }, + "@timeOut": { + "description": "Error message when a request times out." + }, + "@tokenDataParseError": { + "description": "Error message when the token data could not be parsed." + }, + "@tokenDetails": { + "description": "Title of the token details menu." + }, + "@tokenSerial": { + "description": "Label for the token serial number." + }, + "@tokensDoNotSupportSynchronization": { + "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + }, + "@type": { + "description": "Title of the dropdown button where the type of the token is selected." + }, + "@unexpectedError": { + "description": "Title of page report mode." + }, + "@unknown": { + "description": "Tells that something is unknown." + }, + "@unlock": { + "description": "Description of button that unlocks a token." + }, + "@unsupported": { "placeholders": { - "algorithm": { - "example": "MD5" + "name": { + "example": "piauth version" + }, + "value": { + "example": "5" } } }, - "thisAppIsOpenSource": "Cette application est open source\nRendez-nous visite sur GitHub", - "invalidArgument": "{argument} n'est pas une valeur valide pour {type}", - "importExportTokens": "Importer/Exporter les jetons", - "exportNonPrivacyIDEATokens": "Exporter les jetons non privacyIDEA", - "selectTokensToExport": "{count, plural, zero{} one{Sélectionner le jeton à exporter} other{Sélectionner les jetons à exporter}}", - "noTokenToExport": "Pas de jeton disponible pour l'exportation", - "exportAllTokens": "Exporter tous les jetons", - "export": "Exporter", - "exportingTokens": "Exportation des jetons en cours...", - "exportTokens": "Exporter les jetons", - "enterPasswordToEncrypt": "Entrez un mot de passe pour chiffrer les jetons. Ce mot de passe sera requis pour importer les jetons.", - "exportLockedTokenReason": "Veuillez vous authentifier pour exporter les jetons verrouillés.", - "fileSavedToDownloadsFolder": "Fichier enregistré dans le dossier Téléchargements", - "errorSavingFile": "Erreur lors de l'enregistrement du fichier", - "asQrCode": "Sous forme de code QR", - "asFile": "En tant que fichier", - "scanThisQrWithNewDevice": "Scannez ce code QR avec votre nouvel appareil pour importer le jeton.", - "oneMore": "Encore un", - "done": "Terminé", - "confirmPassword": "Confirmer le mot de passe", - "exampleUrl": "Veuillez saisir une URL valide comme : \"https://example.com/\"", - "pushEndpointUrl": "URL de l'endpoint Push", - "mustNotBeEmpty": "{field} ne doit pas être vide", - "@mustNotBeEmpty": { + "@useDeviceLocaleDescription": { + "description": "Description of the switch tile where using the devices language can be enabled." + }, + "@useDeviceLocaleTitle": { + "description": "Title of the switch tile where using the devices language can be enabled." + }, + "@valueNotAllowed": { "placeholders": { - "field": { - "example": "Name" + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "sendPushRequestResponseFailed": "Échec de l'envoi de la réponse.", - "@sendPushRequestResponseFailed": { - "description": "Error message when the response to a push request could not be sent." + "@valueNotAllowedIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" + } + } }, + "@verboseLogging": { + "description": "Title of the switch tile where verbose logging can be enabled." + }, + "accept": "Accepter", + "addANewFolder": "Créer un nouveau dossier", + "addFolder": "Ajouter un dossier", + "addSystemInfo": "Ajouter des informations sur le système", + "addToken": "Ajouter un jeton", + "addTokenManually": "Add token manually", + "algorithm": "Algorithme", + "algorithmUnsupported": "L'algorithme {algorithm} n'est pas pris en charge", + "allTokensSynchronized": "Tous les jetons ont été synchronisés.", + "asFile": "En tant que fichier", + "asQrCode": "Sous forme de code QR", + "askLogSendedDescription": "Avez-vous envoyé le journal et voulez-vous l'effacer maintenant ?", + "authNotSupportedBody": "Cette action nécessite que l'appareil soit sécurisé par des identifiants ou des données biométriques.", + "authNotSupportedTitle": "Informations d'identification de l'appareil ou données biométriques requises", + "authToAcceptPushRequest": "Veuillez vous authentifier pour accepter la demande de connexion.", + "authToDeclinePushRequest": "Veuillez vous authentifier pour refuser la demande de connexion.", + "authenticateToShowOtp": "Veuillez vous authentifier pour afficher un mot de passe à usage unique.", + "authenticateToUnLockToken": "Veuillez vous authentifier pour modifier l'état de verrouillage du jeton.", + "authenticationRequest": "Authentification", + "biometricHint": "Authentification requise", + "biometricNotRecognized": "Pas reconnu. Réessayer.", + "biometricRequiredTitle": "La biométrie n'est pas configurée", + "biometricSuccess": "Authentification réussie", + "butDiscardIt": "mais l'écarter", + "cancel": "Annuler", + "checkServerCertificate": "Veuillez vérifier le certificat du serveur", + "checkYourNetwork": "Veuillez vérifier votre connexion réseau et réessayer.", + "clearErrorLog": "Effacer", + "closeSearchTokens": "Fermer la recherche", + "confirmDeletion": "Confirmer suppression", + "confirmDeletionOf": "Confirmer la suppression de {name}?", + "confirmFolderDeletionHint": "La suppression d'un dossier n'a aucun effet sur les tokens qui s'y trouvent.\nLes tokens sont déplacés dans la liste principale.", + "confirmPassword": "Confirmer le mot de passe", + "confirmTokenDeletionHint": "Il se peut que vous ne puissiez plus vous connecter si vous supprimez ce token.\nVeuillez vous assurer que vous pouvez vous connecter au compte associé sans ce token.", + "confirmation": "Confirmation", + "connectionFailed": "La connexion a échoué.", + "container": "Conteneur", + "continueButton": "Continue", + "copyOTPToClipboard": "Copier l'OTP dans le presse-papiers", + "couldNotConnectToServer": "Impossible de se connecter au serveur.", + "couldNotSignMessage": "Impossible de signer le message.", + "counter": "Compteur", + "create": "créer", + "createdAt": "Créé à", + "creator": "Créateur", + "decline": "Refuser", + "declineIt": "refuser", + "decrypt": "Décrypter", + "decryptErrorButtonDelete": "Supprimer", + "decryptErrorButtonRetry": "Réessayer", + "decryptErrorButtonSendError": "Erreur d'envoi", + "decryptErrorContent": "Malheureusement, l'application n'a pas pu décrypter vos jetons. Cela indique que la clé de cryptage est cassée. Vous pouvez réessayer ou supprimer les données de l'application, ce qui supprimera les jetons dans l'application.", + "decryptErrorDeleteConfirmationContent": "Êtes-vous sûr de vouloir supprimer les données de l'application ?", + "decryptErrorTitle": "Erreur de décryptage", + "delete": "Supprimer", + "deleteLockedToken": "Veuillez vous authentifier pour supprimer le jeton verrouillé.", + "deviceCredentialsRequiredTitle": "Les informations d'identification de l'appareil ne sont pas configurées", + "deviceCredentialsSetupDescription": "Configurer les informations d'identification de l'appareil dans les paramètres de l'appareil", + "digits": "Chiffres", + "dismiss": "Fermer", + "done": "Terminé", + "edit": "Modifier", + "editLockedToken": "Veuillez vous authentifier pour modifier le jeton verrouillé.", + "editToken": "Modifier le jeton", + "enablePolling": "Activer l'interrogation du serveur.", + "encoding": "Encodage", + "enterDetailsForToken": "Saisissez les détails du jeton", + "enterLink": "Saisir le lien", + "enterPasswordToEncrypt": "Entrez un mot de passe pour chiffrer les jetons. Ce mot de passe sera requis pour importer les jetons.", + "errorLogCleared": "Journal d'erreur nettoyé", + "errorLogEmpty": "Le journal des erreurs est vide", + "errorLogTitle": "Journal d'erreur", + "errorMailBody": "Le fichier journal des erreurs est joint.\nVous pouvez remplacer ce texte par des informations supplémentaires sur l'erreur.", + "errorRollOutFailed": "Le déploiement du jeton {name} a échoué.", + "errorRollOutNoConnectionToServer": "El despliegue del token {name} ha fallado, no se ha podido acceder al servidor.", + "errorRollOutNotPossibleAnymore": "Le déploiement de ce jeton n'est plus possible.", + "errorRollOutSSLHandshakeFailed": "Échec de la prise de contact SSL. Le déploiement n'est pas possible.", + "errorRollOutUnknownError": "Le déploiement a échoué suite à une erreur inconnue: {e}", + "errorSavingFile": "Erreur lors de l'enregistrement du fichier", + "errorSynchronizationNoNetworkConnection": "La synchronization a échoué car le serveur est injoignable.", + "errorTokenExpired": "Le jeton {name} a expiré.", + "errorUnlinkingPushToken": "Echec du découplage du push token {label}", + "errorWhenPullingChallenges": "Une erreur s'est produite lors de l'interrogation des défis de {name}", + "exampleUrl": "Veuillez saisir une URL valide comme : \"https://example.com/\"", + "expandLockedFolder": "Veuillez vous authentifier pour ouvrir le dossier verrouillé.", + "export": "Exporter", + "exportAllTokens": "Exporter tous les jetons", + "exportLockedTokenReason": "Veuillez vous authentifier pour exporter les jetons verrouillés.", + "exportNonPrivacyIDEATokens": "Exporter les jetons non privacyIDEA", + "exportTokens": "Exporter les jetons", + "exportingTokens": "Exportation des jetons en cours...", + "failedToLoad": "Échec du chargement :", + "feedback": "Retour d'information", + "feedbackDescription": "Si vous avez des questions, des suggestions ou des problèmes, n'hésitez pas à nous en faire part", + "feedbackHint": "Un e-mail prêt à l'emploi s'ouvre, que vous pouvez nous envoyer. Si vous le souhaitez, des informations sur votre appareil et la version de l'application seront ajoutées. Vous pouvez vérifier et modifier l'e-mail avant de l'envoyer.", + "feedbackPrivacyPolicy1": "En envoyant le retour d'information, vous acceptez notre ", + "feedbackPrivacyPolicy2": "politique de confidentialité", + "feedbackPrivacyPolicy3": ".", + "feedbackSentDescription": "Merci beaucoup pour votre aide dans l'amélioration de cette application !", + "feedbackSentTitle": "Retour d'information envoyé", + "feedbackTitle": "Vos commentaires sont toujours les bienvenus !", + "fileSavedToDownloadsFolder": "Fichier enregistré dans le dossier Téléchargements", + "findingQrCodeInImage": "Recherche d'un code QR dans une image...", + "firebaseToken": "Jeton Firebase", + "folderName": "Nom du dossier", + "generatingPhonePart": "Générer la part du téléphone", + "generatingRSAKeyPair": "Génération de la paire de clés RSA", + "generatingRSAKeyPairFailed": "La génération de la paire de clés RSA a échoué", + "goToSettingsButton": "Aller aux paramètres", + "goToSettingsDescription": "L'authentification par identifiants ou biométrie n'est pas configurée sur votre appareil. Veuillez le configurer dans les paramètres de l'appareil.", + "grantCameraPermissionDialogButton": "Accorder l'autorisation", + "grantCameraPermissionDialogContent": "Veuillez accorder à la caméra l'autorisation de scanner les codes QR", + "grantCameraPermissionDialogPermanentlyDenied": "L'autorisation de l'appareil photo est refusée de manière permanente. Veuillez accorder l'autorisation à l'appareil photo dans les paramètres de votre téléphone.", + "grantCameraPermissionDialogTitle": "L'autorisation de la caméra n'est pas accordée", + "handshakeFailed": "Échec du handshake", + "hidePushTokens": "Hide push tokens", + "hidePushTokensDescription": "Masquer les jetons de poussée de la liste des jetons. Cela ne supprimera pas les jetons et ils seront toujours visibles sur un écran séparé", + "imageUrl": "URL de l'image", + "importConflictToken": "{count, plural, zero{Il n'y a pas de conflit avec des tokens déjà existants.} one{Il y a un conflit avec des tokens déjà existants.\nVeuillez choisir celui que vous voulez garder.} other{Il y a un conflit avec des tokens déjà existants.\nVeuillez choisir celui que vous voulez garder.}}", + "importExistingToken": "{count, plural, zero{Aucun jeton déjà présent dans l'application n'a été trouvé.} one{Un jeton qui existe déjà dans l'application a été trouvé.} other{Des jetons {count} déjà présents dans l'application ont été trouvés.}}", + "importExportTokens": "Importer/Exporter les jetons", + "importFailedToken": "{count, plural, zero{Pas de jeton Échec de l'importation.} one{Échec de l'importation d'un jeton.} other{Échec de l'importation des jetons {count}.}}", + "importHint2FAS": "Choisissez votre sauvegarde 2FAS.\nSi vous n'avez pas de sauvegarde, créez-en une dans l'application 2FAS. Nous vous recommandons d'utiliser un mot de passe", + "importHintAegisBackupFile": "Choisissez votre exportation Aegis (.JSON).\nSi vous n'avez pas d'exportation, veuillez en créer une via le menu Paramètres dans l'application Aegis. Il est recommandé d'utiliser un mot de passe", + "importHintAegisLink": "Saisissez le lien que vous recevez lorsque vous transférez des entrées depuis Aegis", + "importHintAegisQrScan": "Scannez le code QR que vous recevez lorsque vous transférez des entrées depuis Aegis", + "importHintAuthenticatorProFile": "Pour créer une sauvegarde de l'application Authenticator Pro, accédez aux paramètres et appuyez sur \"Sauvegarde automatique\". Sélectionnez un emplacement de stockage et définissez un mot de passe. Puis appuyez sur \"Sauvegarder maintenant\" pour exporter les tokens.", + "importHintFreeOtpPlusFile": "Pour créer une sauvegarde de l'application FreeOTP+, appuyez sur les trois points dans le coin supérieur droit et sélectionnez \"Exporter\". Vous pouvez choisir entre les formats JSON et URI. Nous recommandons de supprimer la sauvegarde après l'avoir importée, car elle n'est pas cryptée.", + "importHintFreeOtpPlusQrScan": "Scannez le code QR que vous recevez lorsque vous appuyez sur les trois points dans la tuile du jeton et sélectionnez \"Partager le code QR\".", + "importHintGoogleQrFile": "Sélectionnez un fichier image avec le code QR que vous obtenez lorsque vous exportez vos comptes depuis Google Authenticator.\n!! Notez qu'il n'est pas sûr d'enregistrer le code QR sur votre appareil, car les jetons ne sont pas cryptés !!", + "importHintGoogleQrScan": "Scannez le code QR que vous recevez lorsque vous exportez vos comptes depuis Google Authenticator", + "importHintPrivacyIdeaFile": "Pour créer une sauvegarde, allez dans les paramètres et tapez sur \"Exporter\". Choisissez \"En tant que fichier\", sélectionnez les jetons que vous souhaitez exporter. Ensuite, appuyez sur \"Exporter\" et définissez un mot de passe. L'emplacement de stockage est le dossier de téléchargement sur votre appareil.", + "importHintPrivacyIdeaQrScan": "Pour créer des codes QR des jetons, accédez aux paramètres et appuyez sur \"Exporter\". Sélectionnez ensuite \"En tant que code QR\" et tapez sur le jeton à exporter. Cette variante ne convient que pour un transfert direct vers un autre appareil, car le code QR n'est pas crypté.", + "importNTokens": "{count, plural, zero{N'importer aucun jeton} one{Importer un jeton} other{Importer {count} tokens}}", + "importNewToken": "{count, plural, zero{Aucun nouveau jeton n'a été trouvé.} one{Un nouveau token a été trouvé et peut être importé.} other{{count} nouveaux tokens ont été trouvés et peuvent être importés.}}", + "importTokens": "Importer un jeton", + "importedVia": "Importé via", + "increaseCounter": "Augmenter le compteur", + "internalServerError": "Erreur interne du serveur ({code})", + "introAddFolder": "Vous pouvez créer des dossiers pour organiser vos jetons", + "introAddTokenManually": "Si vous ne souhaitez pas scanner un code QR, vous pouvez également ajouter des jetons manuellement.", + "introDragToken": "Réorganisez vos jetons en appuyant dessus pendant quelques secondes, puis en les faisant glisser jusqu'à la position souhaitée", + "introEditToken": "Ici, vous pouvez modifier le nom du token et voir quelques détails", + "introHidePushTokens": "Vos jetons sont maintenant cachés, mais vous pouvez toujours les voir sur l'écran des jetons", + "introLockToken": "Pour améliorer encore la sécurité, vous pouvez verrouiller les tokens. Le token ne peut alors être utilisé qu'après l'authentification.", + "introPollForChallenges": "Vous pouvez vérifier la présence de nouveaux défis en faisant glisser la liste des jetons vers le bas", + "introScanQrCode": "You can scan QR codes to add tokens.\nWe support every common Two-Factor-Authentication token and also the privacyIDEA tokens.", + "introTokenSwipe": "Balayez les tokens vers la gauche pour voir les actions disponibles", + "invalidBackupFile": "Le fichier sélectionné n'est pas une sauvegarde valide de {appName}", + "invalidLink": "Le lien saisi n'est pas un jeton valide de {appName}, ou il n'est pas pris en charge", + "invalidQrFile": "Le fichier sélectionné ne contient pas de code QR valide de {appName}", + "invalidQrScan": "Le code QR scanné n'est pas une sauvegarde valide de {appName}", + "invalidValue": "untranslated", + "invalidValueIn": "untranslated", + "isExpotableQuestion": "Est exportable ?", + "isPiTokenQuestion": "C'est un jeton privacyIDEA ?", + "language": "Langue", + "legacySigningErrorMessage": "Le token a été créé dans une version obsolète de l'application, ce qui peut entraîner des problèmes d'utilisation.\nIl est recommandé de créer un nouveau token push si le problème persiste !", + "legacySigningErrorTitle": "Une erreur s'est produite lors de l'utilisation du jeton obsolète : {tokenLabel}", + "licenses": "Licences", + "licensesAndVersion": "Licences et version", + "linkedContainer": "Conteneur lié", + "lock": "Bloquer", + "lockOut": "L'authentification biométrique est désactivée. Veuillez verrouiller et déverrouiller votre écran pour l'activer.", + "logMenu": "Menu du journal", + "malformedData": "Les données ne sont pas valides", + "markQrCode": "Marquer le code QR", + "missingRequiredParameter": "La valeur du paramètre [{parameter}] est requise, mais elle est manquante.", + "missingRequiredParameterIn": "La valeur du paramètre [{parameter}] est requise, mais elle est absente de \"{map}\".", + "mustNotBeEmpty": "{field} ne doit pas être vide", + "name": "Nom", + "no": "Non", + "noFbToken": "Pas de jeton Firebase", + "noMailAppDescription": "Aucune application de messagerie n'est installée ou initialisée sur cet appareil. Veuillez réessayer lorsque vous serez en mesure d'envoyer un message électronique.", + "noMailAppTitle": "Aucune application de messagerie trouvée", + "noNetworkConnection": "Pas de connexion au réseau.", + "noPublicKey": "Pas de clé publique", + "noResultText1": "Appuyez sur le \n", + "noResultText2": "bouton pour commencer!", + "noResultTitle": "Aucun jeton n'est encore stocké.", + "noTokenToExport": "Pas de jeton disponible pour l'exportation", + "notAnInteger": "La valeur n'est pas un nombre entier.", + "notAnNumber": "La valeur n'est pas un nombre.", + "ok": "Ok", + "oneMore": "Encore un", + "open": "Ouvrir", + "optionalMessage": "Message optionnel", + "originApp": "Application d'origine", + "originDetails": "Informations sur l'origine", + "otpValueCopiedMessage": "Le mot de passe \"{otpValue}\" a été copié dans le presse-papier.", + "parsingResponse": "Analyse de la réponse", + "parsingResponseFailed": "L'analyse de la réponse a échoué", + "password": "Mot de passe", "passwordCannotBeEmpty": "Le mot de passe ne peut pas être vide", - "passwordMustBeAtLeast8Characters": "Le mot de passe doit contenir au moins 8 caractères", "passwordCannotContainWhitespace": "Le mot de passe ne peut pas contenir d'espaces", + "passwordMustBeAtLeast8Characters": "Le mot de passe doit contenir au moins 8 caractères", "passwordMustContainLowercaseLetter": "Le mot de passe doit contenir une lettre minuscule", - "passwordMustContainUppercaseLetter": "Le mot de passe doit contenir une lettre majuscule", "passwordMustContainNumber": "Le mot de passe doit contenir un chiffre", "passwordMustContainSpecialCharacter": "Le mot de passe doit contenir un caractère spécial", + "passwordMustContainUppercaseLetter": "Le mot de passe doit contenir une lettre majuscule", "passwordsDoNotMatch": "Les mots de passe ne correspondent pas", - "selectTokensToExportHelpTitle": "Votre jeton ne figure pas dans la liste ?", - "selectTokensToExportHelpContent": "Si un jeton n'est pas répertorié, il n'est pas garanti qu'il ne s'agisse pas d'un jeton privacyIDEA.\nActuellement, seuls les jetons ajoutés manuellement et importés sont exportables.", - "findingQrCodeInImage": "Recherche d'un code QR dans une image...", - "qrNotFound": "Aucun code QR trouvé !", + "patchNotesBugFixes": "Bug fixes", + "patchNotesDialogTitle": "Quoi de neuf ?", + "patchNotesImprovements": "Améliorations", + "patchNotesNewFeatures": "Nouvelles caractéristiques", + "patchNotesV4_3_0NewFeatures1": "Ajout de la prise en charge de l'importation de jetons depuis Google, Aegis et 2FAS Authenticator. D'autres sources d'importation seront ajoutées à l'avenir.", + "patchNotesV4_3_0NewFeatures2": "Ajout d'une option de retour d'information dans les paramètres", + "patchNotesV4_3_0NewFeatures3": "Les jetons de poussée peuvent maintenant être cachés de la liste des jetons", + "patchNotesV4_3_0NewFeatures4": "Des introductions ont été ajoutées pour aider les nouveaux utilisateurs à démarrer", + "patchNotesV4_3_0NewFeatures5": "Vous pouvez désormais rechercher des jetons en appuyant sur la loupe dans le coin supérieur droit", + "patchNotesV4_3_0NewFeatures6": "Ajout du jeton HomeWidget pour Android 12 et les versions ultérieures", + "patchNotesV4_3_1BugFix1": "Un problème a été corrigé où la valeur OTP n'était pas affichée après l'authentification sur certains appareils.", + "patchNotesV4_3_1Improvement1": "Le scanner de codes QR a été amélioré.", + "patchNotesV4_4_0Improvement1": "D'autres sources d'importation ont été ajoutées.", + "patchNotesV4_4_0Improvement2": "La reconnaissance des codes QR à partir des fichiers image a été améliorée.", + "patchNotesV4_4_0NewFeatures1": "Il est désormais possible d'exporter des jetons dont on peut s'assurer qu'il ne s'agit pas de jetons privacyIDEA. Actuellement, il n'est pas possible d'exclure que des jetons ajoutés via le lecteur de code QR proviennent de privacyIDEA. La différenciation sera améliorée dans les versions futures.", + "patchNotesV4_4_0NewFeatures2": "Ajout du support pour privacyIDEA's \"require presence\".", + "period": "Période", + "phonePart": "Part du téléphone:", + "pleaseEnterANameForThisToken": "Veuillez saisir un nom pour ce jeton.", + "pleaseEnterASecretForThisToken": "Veuillez saisir un secret pour ce jeton.", + "pleaseSyncManuallyWhenNetworkIsAvailable": "Veuillez synchroniser manuellement les jetons Push via les paramètres lorsqu'une connexion réseau est disponible", + "pollingChallenges": "Vérification de nouveaux challenges", + "pollingFailed": "Échec de la requête.", + "pollingFailedFor": "Echec de la requête pour {serial}.", + "privacyPolicy": "Politique de confidentialité", + "publicKey": "Clé publique", + "pushEndpointUrl": "URL de l'endpoint Push", + "pushRequestParseError": "La demande push n'a pas pu être traitée.", + "pushToken": "Jeton de type Push", + "pushTokens": "Push Tokens", + "qrFileDecodeError": "Il n'a pas été possible de décoder le code QR à partir de l'image sélectionnée, veuillez utiliser le scanner de code QR à la place", "qrInFileNotFound": "Aucun code QR n'a été trouvé dans l'image sélectionnée.", "qrInFileNotFound2": "Vous pouvez me montrer où se trouve le code QR.", "qrInFileNotFound3": "Je pense que je trouverai le code s'il se trouve au milieu de la zone marquée.", - "markQrCode": "Marquer le code QR", - "malformedData": "Les données ne sont pas valides" + "qrNotFound": "Aucun code QR trouvé !", + "qrScan": "Numériser", + "rename": "Renommer", + "renameToken": "Renommer jeton", + "renameTokenFolder": "Renommer le dossier", + "requestInfo": "Envoyé par {issuer} pour votre compte : \"{account}\"", + "requestPushChallengesPeriodically": "Demander des challenges push depuis le serveur périodiquement. Activer cette fonction si les challenges push ne sont pas reçus normalement.", + "requestTriggerdByUserQuestion": "Cette demande a-t-elle été déclenchée par vous ?", + "retry": "Réessayer", + "retryRollout": "Réessayer le déploiement", + "rolloutCompleted": "Déploiement terminé", + "save": "Enregistrer", + "scanQrCode": "Numériser QR-Code", + "scanThisQrWithNewDevice": "Scannez ce code QR avec votre nouvel appareil pour importer le jeton.", + "searchTokens": "Jetons de recherche", + "secretIsRequired": "Secret est nécessaire", + "secretKey": "Clé secrète", + "selectFile": "Sélectionner un fichier", + "selectImportSource": "Sélectionner la source d'importation", + "selectImportType": "Comment voulez-vous importer les jetons ?", + "selectTokensToExport": "{count, plural, zero{} one{Sélectionner le jeton à exporter} other{Sélectionner les jetons à exporter}}", + "selectTokensToExportHelpContent": "Si un jeton n'est pas répertorié, il n'est pas garanti qu'il ne s'agisse pas d'un jeton privacyIDEA.\nActuellement, seuls les jetons ajoutés manuellement et importés sont exportables.", + "selectTokensToExportHelpTitle": "Votre jeton ne figure pas dans la liste ?", + "send": "Envoyer", + "sendErrorDialogBody": "Une erreur inattendue est survenue dans l'application. L'information suivante peut être transmise aux développeurs par email afin d'aider à corriger cette erreur dans le futur.", + "sendErrorLogDescription": "Un e-mail pré-rempli est créé.\nIl contient des informations sur l'application, l'erreur et le périphérique.\nVous pouvez modifier l'e-mail avant de l'envoyer.\nVous pouvez voir ici comment nous utilisons les informations:", + "sendPushRequestResponseFailed": "Échec de l'envoi de la réponse.", + "sendingRSAPublicKey": "Envoi de la clé publique RSA", + "sendingRSAPublicKeyFailed": "L'envoi de la clé publique RSA a échoué", + "serverNotReachable": "Le serveur n'a pas pu être atteint.", + "settings": "Paramètres", + "settingsGroupGeneral": "Généralités", + "showDetails": "Afficher les détails", + "showErrorLog": "Afficher", + "showPrivacyPolicy": "Afficher la déclaration de confidentialité", + "signInTitle": "Authentification requise", + "someTokensDoNotSupportPolling": "Certains jetons sont obsolètes et ne supportent pas l'interrogation due serveur.", + "startRollout": "Démarrer le déploiement", + "statusCode": "Code d'état : {statusCode}", + "sync": "Synchroniser", + "syncContainerFailed": "Échec de la synchronisation des conteneurs", + "syncFbTokenFailed": "La synchronisation a échoué pour ces jetons, veuillez reéssayer:", + "synchronizePushTokens": "Synchoniser les jetons Push", + "synchronizesTokensWithServer": "Synchroniser les jetons Push avec le serveur privacyIDEA.", + "synchronizingTokens": "Synchroniser les jetons.", + "theSecretDoesNotFitTheCurrentEncoding": "Le secret n'est pas compatible avec \nl'encodage actuel.", + "themeMode": "Thème", + "thisAppIsOpenSource": "Cette application est open source\nRendez-nous visite sur GitHub", + "timeOut": "Délai d'attente", + "tokenDataParseError": "Les données du jeton n'ont pas pu être analysées", + "tokenDetails": "Détails du jeton", + "tokenLink": "Lien vers le token", + "tokenSerial": "Token serial", + "tokensAreEncrypted": "Les jetons sont cryptés. Veuillez saisir le mot de passe pour les décrypter", + "tokensDoNotSupportSynchronization": "Ces jetons ne supportent pas la synchronisation et doivent être de nouveau générés:", + "tokensNotEncrypted": "Les tokens ne sont pas cryptés, et peuvent être importés directement", + "tokensSuccessfullyDecrypted": "Les tokens ont été décryptés avec succès, ils peuvent maintenant être importés.", + "type": "Type", + "unexpectedError": "Une erreur inattendue s'est produite.", + "unknown": "Inconnu", + "unlock": "Ouvrir", + "unsupported": "Le {name} [{value}] n'est pas pris en charge par cette version de l'application.", + "useDeviceLocaleDescription": "Utilisez la langue de l'appareil si elle est prise en charge, sinon l'anglais par défaut.", + "useDeviceLocaleTitle": "Utiliser la langue de l'appareil", + "validFor": "Valide pour", + "validUntil": "Valide jusqu'à", + "valueNotAllowed": "untranslated", + "valueNotAllowedIn": "untranslated", + "verboseLogging": "Journalisation verbeuse", + "version": "Version", + "wrongPassword": "Mot de passe incorrect", + "yes": "Oui" } \ No newline at end of file diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 4dc5c6e31..4043b214e 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -1,374 +1,362 @@ { - "@@last_modified": "2023-08-07", - "patchNotesNewFeatures": "Nieuwe functies", - "patchNotesImprovements": "Verbeteringen", - "patchNotesBugFixes": "Bugfixes", - "patchNotesV4_4_0NewFeatures1": "Het is nu mogelijk om tokens te exporteren waarvan kan worden gegarandeerd dat het geen privacyIDEA tokens zijn. Op dit moment kan niet worden uitgesloten dat tokens die zijn toegevoegd via de QR-code scanner afkomstig zijn van privacyIDEA. De differentiatie zal in toekomstige versies worden verbeterd.", - "patchNotesV4_4_0NewFeatures2": "Ondersteuning toegevoegd voor privacyIDEA's \"require presence\".", - "patchNotesV4_4_0Improvement1": "Er zijn meer invoerbronnen toegevoegd.", - "patchNotesV4_4_0Improvement2": "De herkenning van QR-codes uit afbeeldingsbestanden is verbeterd.", - "patchNotesV4_3_1BugFix1": "Een probleem is opgelost waarbij de otp-waarde niet werd weergegeven na authenticatie op sommige apparaten.", - "patchNotesV4_3_1Improvement1": "De QR-code scanner is verbeterd.", - "patchNotesV4_3_0NewFeatures1": "Ondersteuning toegevoegd voor het importeren van tokens van Google, Aegis en 2FAS Authenticator. Meer importbronnen zullen in de toekomst worden toegevoegd.", - "patchNotesV4_3_0NewFeatures2": "Feedbackoptie toegevoegd aan de instellingen.", - "patchNotesV4_3_0NewFeatures3": "Push tokens kunnen nu verborgen worden in de tokenlijst.", - "patchNotesV4_3_0NewFeatures4": "Introducties zijn toegevoegd om nieuwe gebruikers op weg te helpen.", - "patchNotesV4_3_0NewFeatures5": "Je kunt nu naar tokens zoeken door op het vergrootglas in de rechterbovenhoek te tikken.", - "patchNotesV4_3_0NewFeatures6": "HomeWidget Token toegevoegd voor Android 12 en hoger.", - "guide": "Handleiding", - "@guide": { - "description": "Button to open the guide screen." - }, - "accept": "Accepteren", + "@@last_modified": "2024-09-20", + "@@locale": "nl", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." }, - "decline": "Weigeren", - "@decline": { - "description": "Label for e.g. a button. Something gets declined by the user." - }, - "name": "Naam", - "@name": { - "description": "Describes the field where the tokens name should be entered." - }, - "secretKey": "Geheime sleutel", - "@secretKey": { - "description": "Describes the field where the tokens secret should be entered." - }, - "encoding": "Codering", - "@encoding": { - "description": "Title of the dropdown button where the encoding is selected." + "@addToken": { + "description": "The button to open the screen to add tokens by hand." }, - "algorithm": "Algoritme", "@algorithm": { "description": "Title of the dropdown button where the encoding is selected." }, - "digits": "Cijfers", - "@digits": { - "description": "Title of the dropdown button where the number of digits for the opt value is selected." + "@algorithmUnsupported": { + "placeholders": { + "algorithm": { + "example": "MD5" + } + } }, - "type": "Type", - "@type": { - "description": "Title of the dropdown button where the type of the token is selected." + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." }, - "period": "Duur", - "@period": { - "description": "Title of the dropdown button where the period of the totp token is selected." + "@authNotSupportedBody": { + "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." }, - "rename": "Wijzigen", - "@rename": { - "description": "Label that describes renaming the token." + "@authNotSupportedTitle": { + "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." }, - "cancel": "Annuleren", - "@cancel": { - "description": "Button to cancel an action." + "@authToAcceptPushRequest": { + "description": "Message to accepting a push request for authentication." }, - "delete": "Verwijderen", - "@delete": { - "description": "Label that describes deleting the token." + "@authToDeclinePushRequest": { + "description": "Message for declining a push request for authentication." }, - "dismiss": "Sluiten", - "@dismiss": { - "description": "Text of a button that closes a dialog." + "@authenticateToShowOtp": { + "description": "Reason to authenticate when trying to view a one time password." }, - "addToken": "Token toevoegen", - "@addToken": { - "description": "The button to open the screen to add tokens by hand." + "@authenticateToUnLockToken": { + "description": "Reason to authenticate when trying to lock or unlock a token." }, - "scanQrCode": "Scan QR-Code", - "@scanQrCode": { - "description": "The button to scan otpauth qr-codes." + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, - "enterDetailsForToken": "Voer informatie over token in", - "@enterDetailsForToken": { - "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." + "@biometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterANameForThisToken": "Voer de naam in voor deze token.", - "@pleaseEnterANameForThisToken": { - "description": "Hint telling the user to enter a name for a token." + "@biometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterASecretForThisToken": "Voer de geheime sleutel in voor deze token.", - "@pleaseEnterASecretForThisToken": { - "description": "Hint telling the user to enter a secret for a token." + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, - "theSecretDoesNotFitTheCurrentEncoding": "De geheime sleutel past niet bij de huidige codering", - "@theSecretDoesNotFitTheCurrentEncoding": { - "description": "Hint telling the user that the secret does not fit the selected encoding." + "@cancel": { + "description": "Button to cancel an action." }, - "renameToken": "Hernoem token", - "@renameToken": { - "description": "Title of the dialog where a new name for a token can be entered." + "@checkServerCertificate": { + "description": "Error message when the server certificate should be checked." + }, + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "@clearErrorLog": { + "description": "Button to clear the error log." }, - "confirmDeletion": "Bevestig verwijderen", "@confirmDeletion": { "description": "Title of the dialog where a token can be deleted." }, - "confirmDeletionOf": "Weet u zeker dat u {name} wilt verwijderen?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", "placeholders": { "name": { "example": "PUSH1234" } - } - }, - "confirmTokenDeletionHint": "U kunt mogelijk niet meer inloggen als u dit token verwijdert. Controleer of u zonder dit token kunt inloggen op het gekoppelde account.", - "@confirmTokenDeletionHint": { - "description": "Gives the user a hint about the consequences of deleting a token." + }, + "type": "text" }, - "confirmFolderDeletionHint": "Het verwijderen van een map heeft geen effect op de tokens in de map. De tokens worden verplaatst naar de hoofdlijst.", "@confirmFolderDeletionHint": { "description": "Gives the user a hint about the consequences of deleting a folder." }, - "generatingPhonePart": "Genereren telefoon gedeelte", - "@generatingPhonePart": { - "description": "Title of a dialog telling the user that the phone part gets generated right now." + "@confirmTokenDeletionHint": { + "description": "Gives the user a hint about the consequences of deleting a token." }, - "phonePart": "Telefoon gedeelte:", - "@phonePart": { - "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + "@connectionFailed": { + "description": "Tells the user that the connection failed." }, - "otpValueCopiedMessage": "Wachtwoord \"{otpValue}\" gekopieerd naar het klembord.", - "@otpValueCopiedMessage": { - "description": "Tells the user that the otp value was copied to the clipboard.", - "placeholders": { - "otpValue": { - "example": "055374" - } - } + "@container": { + "description": "Title for the container view." }, - "settings": "Instellingen", - "@settings": { - "description": "Button to open the settings page." + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." }, - "pushToken": "Push Token", - "@pushToken": { - "description": "Title for the settings block concerning the push tokens." + "@counter": { + "description": "Describes the field where the tokens counter should be entered." }, - "theme": "Thema", - "@theme": { - "description": "Title of the setting group where the theme can be selected." + "@createdAt": { + "description": "Label for the creation date of the token." }, - "lightTheme": "Licht", - "@lightTheme": { - "description": "The light theme." + "@creator": { + "description": "Label for the creator of the token." }, - "darkTheme": "Donker", "@darkTheme": { "description": "The dark theme." }, - "systemTheme": "Gebruik thema van het apparaat", - "@systemTheme": { - "description": "The systems theme." + "@decline": { + "description": "Label for e.g. a button. Something gets declined by the user." }, - "someTokensDoNotSupportPolling": "Sommige tokens zijn verouderd en ondersteunen geen actief zoeken", - "@someTokensDoNotSupportPolling": { - "description": "Tells the user, that the following tokens do not support polling.", - "type": "text", - "placeholders": {} + "@delete": { + "description": "Label that describes deleting the token." }, - "enablePolling": "Zoeken aanzetten", - "@enablePolling": { - "description": "Name of the setting switch that enables polling." + "@deviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." }, - "requestPushChallengesPeriodically": "Activeer het zoeken naar berichten. Gebruik deze optie wanneer de push berichten niet worden ontvangen.", - "@requestPushChallengesPeriodically": { - "description": "The description of the polling feature." + "@deviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." }, - "synchronizePushTokens": "Synchroniseer push tokens", - "@synchronizePushTokens": { - "description": "Title of synchronizing push tokens in settings." + "@digits": { + "description": "Title of the dropdown button where the number of digits for the opt value is selected." }, - "synchronizesTokensWithServer": "Synchroniseert tokens met de privacyIDEA server.", - "@synchronizesTokensWithServer": { - "description": "Description of synchronizing push tokens in settings." + "@dismiss": { + "description": "Text of a button that closes a dialog." }, - "sync": "Synchroniseer", - "@sync": { - "description": "Text of button that is used to synchronize push tokens." + "@enablePolling": { + "description": "Name of the setting switch that enables polling." }, - "synchronizingTokens": "Tokens synchroniseren.", - "@synchronizingTokens": { - "description": "Title of the push synchronization dialog." + "@encoding": { + "description": "Title of the dropdown button where the encoding is selected." }, - "allTokensSynchronized": "Alle tokens zijn gesynchroniseerd.", - "@allTokensSynchronized": { - "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + "@enterDetailsForToken": { + "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." }, - "syncFbTokenFailed": "Synchroniseren mislukt voor de volgende tokens, probeer het opnieuw:", - "@syncFbTokenFailed": { - "description": "Headline for the list of tokens where the synchronization failed." + "@errorLogCleared": { + "description": "Message that tells the user that the error log was cleared." }, - "tokensDoNotSupportSynchronization": "Voor de volgende tokens wordt synchroniseren niet ondersteunt, ze moeten opnieuw worden aangeleverd:", - "@tokensDoNotSupportSynchronization": { - "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + "@errorLogEmpty": { + "description": "Message that tells the user that the error log is empty." + }, + "@errorLogTitle": { + "description": "Title of the error log screen." + }, + "@errorMailBody": { + "description": "Message for email body" }, - "errorRollOutFailed": "Uitrollen van token {name} mislukt.", "@errorRollOutFailed": { "description": "Tells the user that the token could not be rolled out, because a network error occurred.", "placeholders": { "name": { "example": "PUSH1234A" } - } + }, + "type": "text" }, - "statusCode": "Statuscode: {statusCode}", - "@statusCode": { - "description": "Tells the user the status code of the error.", + "@errorRollOutNoConnectionToServer": { + "description": "Message for the rollout process", "placeholders": { - "statusCode": { - "example": "400" + "name": { + "example": "PUSH1234A" } } }, - "errorSynchronizationNoNetworkConnection": "Token synchroniseren mislukt, privacyIDEA server kan niet worden bereikt.", - "@errorSynchronizationNoNetworkConnection": { - "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." }, - "errorRollOutUnknownError": "Een onbekende fout heeft plaats gevonden. Uitrollen is niet mogelijk: {e}", "@errorRollOutUnknownError": { "description": "Tells the user that the roll-out failed because of an unknown error.", - "type": "text", "placeholders": { "e": { "example": "IllegalArgumentException on Line 5 ..." } - } - }, - "startRollout": "Start uitrollen", - "@startRollout": { - "description": "Label that tells the user that the token is being rolled out." - }, - "pollingChallenges": "Zoeken naar nieuwe aanvragen", - "@pollingChallenges": { + }, "type": "text" }, - "unexpectedError": "Er is een onverwachte fout opgetreden.", - "@unexpectedError": { - "description": "Title of page report mode." - }, - "pollingFailed": "Vraag mislukt.", - "@pollingFailed": { - "description": "Tells the user that the polling failed." + "@errorSynchronizationNoNetworkConnection": { + "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, - "pollingFailedFor": "Query voor {serial} mislukt.", - "@pollingFailedFor": { - "description": "Tells the user that the polling failed.", + "@errorTokenExpired": { "placeholders": { - "serial": { + "name": { "example": "PUSH1234A" } } }, - "noNetworkConnection": "Geen netwerkverbinding.", - "@noNetworkConnection": { - "description": "Tells the user that there is no network connection." + "@errorUnlinkingPushToken": { + "description": "Error message when unlinking a push token failed.", + "placeholders": { + "label": { + "example": "PUSH1234A" + } + } }, - "connectionFailed": "Verbinding mislukt.", - "@connectionFailed": { - "description": "Tells the user that the connection failed." + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "checkYourNetwork": "Controleer je netwerkverbinding en probeer het opnieuw.", - "@checkYourNetwork": { - "description": "Tells the user to check the network connection." + "@failedToLoad": { + "placeholders": { + "name": { + "example": "token data" + } + } }, - "serverNotReachable": "De server kon niet worden bereikt.", - "@serverNotReachable": { - "description": "Tells the user that the server could not be reached." + "@feedbackPrivacyPolicy2": { + "description": "Hierop tikken moet het privacybeleid openen." }, - "couldNotSignMessage": "Bericht niet kunnen ondertekenen.", - "@couldNotSignMessage": { - "description": "Tells the user that the message could not be signed." + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." }, - "useDeviceLocaleTitle": "Gebruik de taal van het apparaat", - "@useDeviceLocaleTitle": { - "description": "Title of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" }, - "useDeviceLocaleDescription": "Gebruik de taal van het apparaat wanneer het wordt ondersteund, val anders terug op Engels.", - "@useDeviceLocaleDescription": { - "description": "Description of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" }, - "language": "Taal", - "@language": { - "description": "Title of language setting group." + "@goToSettingsButton": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." }, - "authenticateToShowOtp": "Authenticeer om het eenmalige wachtwoord te tonen.", - "@authenticateToShowOtp": { - "description": "Reason to authenticate when trying to view a one time password." + "@goToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." }, - "authenticateToUnLockToken": "Authenticeer om de vergrendeling van de token te wijzigen.", - "@authenticateToUnLockToken": { - "description": "Reason to authenticate when trying to lock or unlock a token." + "@guide": { + "description": "Button to open the guide screen." }, - "biometricRequiredTitle": "Biometrie is niet ingesteld", - "@biometricRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + "@handshakeFailed": { + "description": "Error message when the handshake failed." }, - "biometricHint": "Authenticatie vereist", - "@biometricHint": { - "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + "@importedVia": { + "description": "Label for the import method of the token." }, - "biometricNotRecognized": "Niet herkend. Probeer opnieuw.", - "@biometricNotRecognized": { - "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + "@internalServerError": { + "placeholders": { + "code": { + "example": "500" + } + } }, - "biometricSuccess": "Authenticatie geslaagd", - "@biometricSuccess": { - "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + "@invalidValue": { + "description": "Error message when the value is not valid for the parameter.", + "placeholders": { + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsRequiredTitle": "Inloggevens van het apparaat zijn niet ingesteld", - "@deviceCredentialsRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + "@invalidValueIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsSetupDescription": "Stel de inloggegevens in, bij de instellingen van het apparaat", - "@deviceCredentialsSetupDescription": { - "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + "@isExpotableQuestion": { + "description": "Label for the question if the token is exportable." }, - "signInTitle": "Authenticatie vereist", - "@signInTitle": { - "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + "@isPiTokenQuestion": { + "description": "Label for the question if the token is a privacyIDEA token." }, - "goToSettingsButton": "Ga naar instellingen", - "@goToSettingsButton": { - "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + "@language": { + "description": "Title of language setting group." }, - "goToSettingsDescription": "Authenticatie via inloggegevens of biometrie is niet ingesteld. Stel het in bij de instellingen van het apparaat.", - "@goToSettingsDescription": { - "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." + "@legacySigningErrorMessage": { + "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." }, - "lockOut": "Biometrische authenticatie staat uit. Vergrendel en ontgrendel het scherm om het aan te zetten.", - "@lockOut": { - "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + "@legacySigningErrorTitle": { + "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "placeholders": { + "tokenLabel": { + "example": "PUSH1234A" + } + } }, - "authNotSupportedTitle": "Apparaat inloggevens of biometrie is vereist", - "@authNotSupportedTitle": { - "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." + "@lightTheme": { + "description": "The light theme." }, - "authNotSupportedBody": "Deze actie vereist dat het apparaat is beveiligd met inlogggevens of biometrie.", - "@authNotSupportedBody": { - "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." + "@linkedContainer": { + "description": "Label for the linked container serial number." }, - "lock": "Vergrendel", "@lock": { "description": "Description of button that locks a token." }, - "unlock": "Ontgrendel", - "@unlock": { - "description": "Description of button that unlocks a token." + "@lockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." }, - "noResultTitle": "Nog geen token opgeslagen.", - "@noResultTitle": { - "description": "No tokens installed yet." + "@logMenu": { + "description": "Button to open the log menu." + }, + "@malformedData": { + "description": "Error message when the data is malformed." + }, + "@missingRequiredParameter": { + "description": "Error message when a required parameter is missing.", + "placeholders": { + "parameter": { + "example": "counter" + } + } + }, + "@missingRequiredParameterIn": { + "description": "Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.", + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + } + } + }, + "@mustNotBeEmpty": { + "placeholders": { + "field": { + "example": "Name" + } + } + }, + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "@noFbToken": { + "description": "Tells the user that there is no Firebase token available." + }, + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." }, - "noResultText1": "Tik op ", "@noResultText1": { "description": "first noresult text" }, - "noResultText2": " de knop om te beginnen!", "@noResultText2": { "description": "second noresult text" }, - "onBoardingTitle1": "{appName}", + "@noResultTitle": { + "description": "No tokens installed yet." + }, + "@notAnInteger": { + "description": "Tells the user that there is no Firebase token available." + }, + "@notAnNumber": { + "description": "Error message when the user entered a value that is not a number." + }, + "@ok": { + "description": "Button to confirm an action." + }, "@onBoardingTitle1": { "placeholders": { "appName": { @@ -376,300 +364,557 @@ } } }, - "onBoardingText1": "Twee-factoren authenticatie\nmakkelijk gemaakt", - "onBoardingTitle2": "Maximale Beveiliging", - "onBoardingText2": "Bewaar tokens op uw apparaat\nbeveiligd door uw biometrische gegevens", - "onBoardingTitle3": "Bezoek ons op Github", - "onBoardingText3": "Deze app is open source", - "errorLogTitle": "Foutenlogboek", - "logMenu": "Log menu", - "showErrorLog": "Weergeven", - "clearErrorLog": "Verwijderen", - "send": "verzenden", - "sendErrorLogDescription": "Er wordt een kant-en-klare e-mail gemaakt die informatie bevat over de app, de fout en het apparaat.\nJe kunt de e-mail bewerken voordat je hem verstuurt.\nJe kunt hier zien hoe we de informatie gebruiken:", - "@sendErrorLogDescription": { - "description": "Explanation for the user what he will send." - }, - "showPrivacyPolicy": "Privacybeleid tonen", - "errorLogEmpty": "Het foutenlogboek is leeg.", - "verboseLogging": "Verbose loggen", - "errorLogCleared": "Foutenlogboek gewist.", - "ok": "Ok", - "errorMailBody": "Het foutlogbestand is bijgevoegd.\nU kunt deze tekst vervangen door aanvullende informatie over de fout.", - "@errorMailBody": { - "description": "Message for email body" - }, - "showDetails": "Details tonen", - "open": "Openen", - "sendErrorDialogBody": "Een onverwachte fout heeft plaatsgevonden in de applicatie. De onderstaande informatie kan worden verstuurd naar de ontwikkelaars via e-mail om het probleem in de toekomst te voorkomen.", - "@sendErrorDialogBody": { - "description": "Description shown to the user about what info the error report contains." - }, - "noFbToken": "Geen Firebase Token beschikbaar", - "firebaseToken": "Firebase Token", - "noPublicKey": "Geen openbare sleutel beschikbaar", - "publicKey": "Openbare sleutel", - "editToken": "Token bewerken", - "edit": "Bewerken", - "save": "Opslaan", - "create": "Creëer", - "validFor": "Geldig voor", - "validUntil": "Geldig tot", - "deleteLockedToken": "Verifieer om het vergrendelde token te verwijderen.", - "editLockedToken": "Verifieer om het vergrendelde token te bewerken.", - "expandLockedFolder": "Verifieer om de vergrendelde map te openen.", - "renameTokenFolder": "Map hernoemen", - "addANewFolder": "Nieuwe map maken", - "folderName": "Mapnaam", - "retryRollout": "Opnieuw uitrollen", - "generatingRSAKeyPair": "Genereren RSA sleutelpaar", - "@generatingRSAKeyPair": { - "description": "Message for the rollout process" + "@open": { + "description": "Button to open something." }, - "generatingRSAKeyPairFailed": "Genereren RSA sleutelpaar mislukt", - "@generatingRSAKeyPairFailed": { - "description": "Message for the rollout process" + "@originApp": { + "description": "Label for the origin app." }, - "sendingRSAPublicKey": "Versturen van de openbare RSA sleutel", - "@sendingRSAPublicKey": { - "description": "Message for the rollout process" + "@originDetails": { + "description": "Title of the origin details menu." }, - "sendingRSAPublicKeyFailed": "Versturen van de openbare RSA sleutel mislukt", - "@sendingRSAPublicKeyFailed": { - "description": "Message for the rollout process" + "@otpValueCopiedMessage": { + "description": "Tells the user that the otp value was copied to the clipboard.", + "placeholders": { + "otpValue": { + "example": "055374" + } + }, + "type": "text" }, - "parsingResponse": "Antwoord analyseren", "@parsingResponse": { "description": "Message for the rollout process" }, - "parsingResponseFailed": "Antwoord analyseren mislukt", "@parsingResponseFailed": { "description": "Message for the rollout process" }, - "rolloutCompleted": "Uitrollen voltooid", - "@rolloutCompleted": { - "description": "Message for the rollout process" + "@period": { + "description": "Title of the dropdown button where the period of the totp token is selected." }, - "errorRollOutNoConnectionToServer": "Uitrollen mislukt. Geen verbinding met de server.", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process" + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "authToAcceptPushRequest": "Authenticeer om de push aanvraag te accepteren.", - "@authToAcceptPushRequest": { - "description": "Message for the rollout process" + "@pleaseEnterANameForThisToken": { + "description": "Hint telling the user to enter a name for a token." }, - "authToDeclinePushRequest": "Authenticeer om de push aanvraag te weigeren.", - "@authToDeclinePushRequest": { - "description": "Message for the rollout process" + "@pleaseEnterASecretForThisToken": { + "description": "Hint telling the user to enter a secret for a token." }, - "pushRequestParseError": "Het pushverzoek kon niet worden verwerkt.", - "imageUrl": "Afbeeldings-URL", - "errorRollOutSSLHandshakeFailed": "SSL-handdruk mislukt. Uitrollen niet mogelijk.", - "@errorRollOutSSLHandshakeFailed": { - "description": "Message for the rollout process" + "@pollingChallenges": { + "type": "text" }, - "errorWhenPullingChallenges": "Er is een fout opgetreden bij het zoeken naar uitdagingen van {name}", - "@errorWhenPullingChallenges": { + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", "placeholders": { - "name": { + "serial": { "example": "PUSH1234A" } } }, - "couldNotConnectToServer": "Kan geen verbinding maken met de server.", - "errorRollOutNotPossibleAnymore": "Het uitrollen van dit token is niet meer mogelijk.", - "errorTokenExpired": "Het token {name} is verlopen.", - "@errorTokenExpired": { - "placeholders": { - "name": { - "example": "PUSH1234A" + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "@rename": { + "description": "Label that describes renaming the token." + }, + "@renameToken": { + "description": "Title of the dialog where a new name for a token can be entered." + }, + "@renameTokenFolder": { + "description": "Title of the dialog where a new name for a token folder can be entered." + }, + "@requestInfo": { + "description": "Description of the authentication request.", + "placeholders": { + "account": { + "example": "GitHub" + }, + "issuer": { + "example": "privacyIDEA" } } }, - "yes": "Ja", - "no": "Nee", - "butDiscardIt": "maar verwijder", - "declineIt": "weigeren", - "requestTriggerdByUserQuestion": "Is dit verzoek door jou gedaan?", - "grantCameraPermissionDialogTitle": "Cameratoestemming is niet verleend", - "grantCameraPermissionDialogContent": "Geef de camera toestemming om QR-codes te scannen.", - "grantCameraPermissionDialogPermanentlyDenied": "Cameratoestemming is permanent geweigerd. Geef de camera toestemming in de instellingen van uw telefoon.", - "grantCameraPermissionDialogButton": "Toestemming verlenen", - "decryptErrorTitle": "Fout bij decoderen", - "decryptErrorContent": "Helaas heeft de app je tokens niet kunnen decoderen. Dit geeft aan dat de coderingssleutel is verbroken. U kunt het opnieuw proberen of de app-gegevens verwijderen, waardoor de tokens in de app worden verwijderd.", - "decryptErrorButtonDelete": "Verwijderen", - "decryptErrorButtonSendError": "Fout verzenden", - "decryptErrorButtonRetry": "Opnieuw proberen", - "decryptErrorDeleteConfirmationContent": "Weet je zeker dat je de app-gegevens wilt verwijderen?", - "hidePushTokens": "Verberg push tokens", - "hidePushTokensDescription": "Verberg push tokens uit de token lijst. Hierdoor worden de tokens niet verwijderd en blijven ze zichtbaar op een apart scherm.", - "settingsGroupGeneral": "Algemene informatie", - "licensesAndVersion": "Licenties en versie", - "privacyPolicy": "Privacybeleid", - "introScanQrCode": "Je kunt QR-codes scannen om tokens toe te voegen.We ondersteunen alle gangbare Two-Factor-Authenticatie tokens en ook de privacyIDEA tokens.", - "introAddTokenManually": "Als je geen QR-code wilt scannen, kun je tokens ook handmatig toevoegen.", - "introTokenSwipe": "Veeg tokens naar links om beschikbare acties te zien.", - "introEditToken": "Hier kun je de naam van het token bewerken en enkele details bekijken.", - "introLockToken": "Om de beveiliging nog meer te verbeteren, kun je tokens vergrendelen.¨Dan kan het token alleen gebruikt worden na authenticatie.", - "introDragToken": "Reorganiseer je tokens door er een paar seconden op te drukken en het dan naar de gewenste positie te slepen.", - "introAddFolder": "Je kunt mappen maken om je tokens te organiseren.", - "introPollForChallenges": "Je kunt controleren of er nieuwe uitdagingen zijn door de lijst met tokens naar beneden te slepen.", - "introHidePushTokens": "Je push tokens zijn nu verborgen, maar je kunt ze nog steeds zien op het push token scherm.", - "legacySigningErrorTitle": "Er is een fout opgetreden bij het gebruik van het verouderde token: {tokenLabel}", - "@legacySigningErrorTitle": { - "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "@requestPushChallengesPeriodically": { + "description": "The description of the polling feature." + }, + "@retry": { + "description": "Label for e.g. a button. Something is tried to be done again." + }, + "@rolloutCompleted": { + "description": "Message for the rollout process" + }, + "@scanQrCode": { + "description": "The button to scan otpauth qr-codes." + }, + "@secretIsRequired": { + "description": "Error message when the secret is missing." + }, + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "@send": { + "description": "Button to send the error log." + }, + "@sendErrorDialogBody": { + "description": "Description shown to the user about what info the error report contains." + }, + "@sendErrorLogDescription": { + "description": "Explanation for the user what he will send." + }, + "@sendPushRequestResponseFailed": { + "description": "Error message when the response to a push request could not be sent." + }, + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "@serverNotReachable": { + "description": "Tells the user that the server could not be reached." + }, + "@settings": { + "description": "Button to open the settings page." + }, + "@showDetails": { + "description": "Button to show details." + }, + "@showErrorLog": { + "description": "Button to show the error log." + }, + "@showPrivacyPolicy": { + "description": "Button to show the privacy policy." + }, + "@signInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "@someTokensDoNotSupportPolling": { + "description": "Tells the user, that the following tokens do not support polling.", + "type": "text" + }, + "@startRollout": { + "description": "Label that tells the user that the token is being rolled out." + }, + "@statusCode": { + "description": "Tells the user the status code of the error.", "placeholders": { - "tokenLabel": { - "example": "PUSH1234A" + "statusCode": { + "example": "400" } } }, - "legacySigningErrorMessage": "Het token is aangemaakt in een verouderde versie van de app, wat kan leiden tot problemen bij het gebruik ervan.\nHet wordt aanbevolen om een nieuw push token aan te maken als het probleem zich blijft voordoen!", - "@legacySigningErrorMessage": { - "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." + "@sync": { + "description": "Text of button that is used to synchronize push tokens." }, - "selectImportSource": "Selecteer importbron", - "selectImportType": "Hoe wilt u de tokens importeren?", - "importTokens": "Importer un jeton", - "importNTokens": "{count, plural, zero{Geen tokens importeren} one{Eén token importeren} other{Importeer {count} tokens}}", - "selectFile": "Selecteer bestand", - "decrypt": "Decoderen", - "tokensAreEncrypted": "De tokens zijn gecodeerd. Voer het wachtwoord in om ze te decoderen.", - "tokensNotEncrypted": "De tokens zijn niet versleuteld en kunnen direct worden geïmporteerd.", - "tokensSuccessfullyDecrypted": "De tokens zijn succesvol gedecodeerd en kunnen nu worden geïmporteerd.", - "password": "Wachtwoord", - "wrongPassword": "Onjuist wachtwoord", - "qrScan": "Scan", - "enterLink": "Link invoeren", - "invalidBackupFile": "Het geselecteerde bestand is geen geldige backup van {appName}.", - "invalidQrScan": "De gescande QR code is geen geldige backup van {appName}.", - "invalidQrFile": "Het geselecteerde bestand bevat geen geldige QR code van {appName}.", - "invalidLink": "De ingevoerde link is geen geldig token van {appName}, of wordt niet ondersteund.", - "importFailedToken": "{count, plural, zero{Geen token Niet geïmporteerd.} one{Kan geen token importeren.} other{Kan {count} tokens niet importeren.}}", - "importExistingToken": "{count, plural, zero{Er is geen token gevonden dat al in de toepassing aanwezig is.} one{Er is een token gevonden dat al bestaat in de applicatie.} other{{count} tokens gevonden die al in de applicatie staan.}}", - "importConflictToken": "{count, plural, zero{Er is geen conflict met tokens die al bestaan.} one{Er is een conflict met tokens die al bestaan.Selecteer welke u wilt behouden.} other{Er is een conflict met tokens die al bestaan.Selecteer welke u wilt behouden.}}", - "importNewToken": "{count, plural, zero{Er is geen nieuw token gevonden.} one{Er is een nieuw token gevonden dat geïmporteerd kan worden.} other{Er zijn {count} nieuwe tokens gevonden die geïmporteerd kunnen worden.}}", - "importHintPrivacyIdeaQrScan": "Om QR-codes van de tokens te maken, navigeer je naar de instellingen en tik je op \"Exporteren\". Selecteer vervolgens \"Als QR-code\" en tik op het muntje dat geëxporteerd moet worden. Deze variant is alleen geschikt voor directe overdracht naar een ander apparaat, omdat de QR-code niet versleuteld is.", - "importHintPrivacyIdeaFile": "Om een back-up te maken, ga je naar de instellingen en tik je op \"Exporteren\". Selecteer \"Als bestand\" en selecteer de tokens die je wilt exporteren. Tik dan op \"Exporteren\" en stel een wachtwoord in. De opslaglocatie is de downloadmap op je apparaat.", - "importHint2FAS": "Selecteer uw 2FAS-back-up. Als u geen back-up hebt, maak er dan een aan in de 2FAS-app. Wij raden u aan een wachtwoord te gebruiken.", - "importHintAegisBackupFile": "Selecteer uw Aegis-export (.JSON).Als u geen export hebt, maak er dan een aan via het instellingenmenu in de Aegis-app. Het gebruik van een wachtwoord wordt aanbevolen.", - "importHintAegisQrScan": "Scan de QR-code die u ontvangt bij het overbrengen van items uit Aegis.", - "importHintAegisLink": "Voer de link in die u ontvangt wanneer u vermeldingen van Aegis overdraagt.", - "importHintGoogleQrScan": "Scan de QR-code die u ontvangt wanneer u uw accounts exporteert vanuit Google Authenticator.", - "importHintGoogleQrFile": "Selecteer een afbeeldingsbestand met de QR-code die u ontvangt wanneer u uw accounts exporteert vanuit Google Authenticator.\n!! Let op: het is niet veilig om de QR-code op je apparaat op te slaan, omdat de tokens niet versleuteld zijn !!", - "importHintAuthenticatorProFile": "Om een back-up te maken van de Authenticator Pro app, navigeer je naar de instellingen en tik je op \"Auto back-up\". Selecteer een opslaglocatie en stel een wachtwoord in. Druk vervolgens op \"Nu back-uppen\" om de tokens te exporteren.", - "importHintFreeOtpPlusQrScan": "Scan de QR-code die u ontvangt wanneer u op de drie stippen in de tegel van de token drukt en selecteer \"QR-code delen\".", - "importHintFreeOtpPlusFile": "Om een back-up van de FreeOTP+ app te maken, tikt u op de drie puntjes in de rechterbovenhoek en selecteert u \"Exporteren\". U kunt kiezen tussen JSON en URI formaat. We raden u aan de back-up te verwijderen na het importeren, omdat deze niet versleuteld is.", - "qrFileDecodeError": "Het was niet mogelijk om de QR code te decoderen van de geselecteerde afbeelding, gebruik in plaats daarvan de QR code scanner.", - "tokenLink": "tokenlink", - "feedback": "Feedback", - "feedbackTitle": "Uw feedback is altijd welkom!", - "feedbackDescription": "Als je vragen, suggesties of problemen hebt, laat het ons dan weten.", - "feedbackHint": "Er wordt een kant-en-klare e-mail geopend die je naar ons kunt sturen. Indien gewenst wordt informatie over je apparaat en de versie van de applicatie toegevoegd. U kunt de e-mail controleren en bewerken voordat u deze verzendt.", - "feedbackPrivacyPolicy1": "Door feedback te sturen ga je akkoord met ons ", - "feedbackPrivacyPolicy2": "privacybeleid", - "@feedbackPrivacyPolicy2": { - "description": "Hierop tikken moet het privacybeleid openen." + "@syncContainerFailed": { + "description": "Error message when synchronizing a container failed." }, - "feedbackPrivacyPolicy3": ".", - "addSystemInfo": "Systeeminformatie toevoegen", - "feedbackSentTitle": "Feedback verzonden", - "feedbackSentDescription": "Hartelijk dank voor je hulp om deze applicatie beter te maken!", - "patchNotesDialogTitle": "Wat is er nieuw?", - "version": "Versie", - "noMailAppTitle": "Geen mail app gevonden", - "noMailAppDescription": "Er is geen e-mail app geïnstalleerd of geïnitialiseerd op dit apparaat, probeer het opnieuw wanneer u in staat bent om een e-mailbericht te verzenden.", - "authenticationRequest": "Verificatieverzoek", - "requestInfo": "Verzonden door {issuer} voor uw account: \"{account}\"", - "@requestInfo": { + "@syncFbTokenFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "@systemTheme": { + "description": "The systems theme." + }, + "@theSecretDoesNotFitTheCurrentEncoding": { + "description": "Hint telling the user that the secret does not fit the selected encoding." + }, + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "@themeMode": { + "description": "Title of the setting group where the theme mode can be changed." + }, + "@timeOut": { + "description": "Error message when a request times out." + }, + "@tokenDataParseError": { + "description": "Error message when the token data could not be parsed." + }, + "@tokenDetails": { + "description": "Title of the token details menu." + }, + "@tokenSerial": { + "description": "Label for the token serial number." + }, + "@tokensDoNotSupportSynchronization": { + "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + }, + "@type": { + "description": "Title of the dropdown button where the type of the token is selected." + }, + "@unexpectedError": { + "description": "Title of page report mode." + }, + "@unknown": { + "description": "Tells that something is unknown." + }, + "@unlock": { + "description": "Description of button that unlocks a token." + }, + "@unsupported": { "placeholders": { - "issuer": { - "example": "privacyIDEA" + "name": { + "example": "piauth version" }, - "account": { - "example": "GitHub" + "value": { + "example": "5" } } }, - "errorUnlinkingPushToken": "Het is niet gelukt om het push token {label} te ontkoppelen.", - "@errorUnlinkingPushToken": { - "description": "Error message when unlinking a push token failed.", + "@useDeviceLocaleDescription": { + "description": "Description of the switch tile where using the devices language can be enabled." + }, + "@useDeviceLocaleTitle": { + "description": "Title of the switch tile where using the devices language can be enabled." + }, + "@valueNotAllowed": { "placeholders": { - "label": { - "example": "PUSH1234A" + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "pleaseSyncManuallyWhenNetworkIsAvailable": "Synchroniseer de push tokens handmatig via de instellingen als er een netwerkverbinding beschikbaar is.", - "pushTokens": "Push Tokens", - "continueButton": "Ga verder", - "addTokenManually": "Voeg token handmatig toe", - "addFolder": "Map toevoegen", - "searchTokens": "Zoek tokens", - "closeSearchTokens": "Zoekopdracht sluiten", - "increaseCounter": "Verhoog teller", - "copyOTPToClipboard": "Kopieer OTP naar klembord", - "licenses": "Licenties", - "optionalMessage": "Optioneel bericht", - "confirmation": "Bevestiging", - "askLogSendedDescription": "Heb je het logboek verzonden en wil je het nu wissen?", - "algorithmUnsupported": "Het algoritme {algorithm} wordt niet ondersteund", - "@algorithmUnsupported": { + "@valueNotAllowedIn": { "placeholders": { - "algorithm": { - "example": "MD5" + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "thisAppIsOpenSource": "Deze app is open source\nBezoek ons op GitHub", - "invalidArgument": "{argument} is geen geldige waarde voor {type}", - "importExportTokens": "Tokens importeren/exporteren", - "exportNonPrivacyIDEATokens": "Niet-privacyIDEA tokens exporteren", - "selectTokensToExport": "{count, plural, zero{} one{Selecteer token om te exporteren} other{Selecteer tokens om te exporteren}}", - "noTokenToExport": "Geen token beschikbaar voor export", - "exportAllTokens": "Alle tokens exporteren", - "export": "Exporteren", - "exportingTokens": "Tokens exporteren...", - "exportTokens": "Tokens exporteren", - "enterPasswordToEncrypt": "Voer een wachtwoord in om de tokens te versleutelen. Dit wachtwoord is vereist om de tokens te importeren.", - "exportLockedTokenReason": "Authenticeer om vergrendelde tokens te exporteren.", - "fileSavedToDownloadsFolder": "Bestand opgeslagen in de map Downloads", - "errorSavingFile": "Fout bij het opslaan van het bestand", - "asQrCode": "Als QR-code", - "asFile": "Als bestand", - "scanThisQrWithNewDevice": "Scan deze QR-code met uw nieuwe apparaat om de token te importeren.", - "oneMore": "Nog een", - "done": "Klaar", + "@verboseLogging": { + "description": "Title of the switch tile where verbose logging can be enabled." + }, + "accept": "Accepteren", + "addANewFolder": "Nieuwe map maken", + "addFolder": "Map toevoegen", + "addSystemInfo": "Systeeminformatie toevoegen", + "addToken": "Token toevoegen", + "addTokenManually": "Voeg token handmatig toe", + "algorithm": "Algoritme", + "algorithmUnsupported": "Het algoritme {algorithm} wordt niet ondersteund", + "allTokensSynchronized": "Alle tokens zijn gesynchroniseerd.", + "asFile": "Als bestand", + "asQrCode": "Als QR-code", + "askLogSendedDescription": "Heb je het logboek verzonden en wil je het nu wissen?", + "authNotSupportedBody": "Deze actie vereist dat het apparaat is beveiligd met inlogggevens of biometrie.", + "authNotSupportedTitle": "Apparaat inloggevens of biometrie is vereist", + "authToAcceptPushRequest": "Authenticeer om de push aanvraag te accepteren.", + "authToDeclinePushRequest": "Authenticeer om de push aanvraag te weigeren.", + "authenticateToShowOtp": "Authenticeer om het eenmalige wachtwoord te tonen.", + "authenticateToUnLockToken": "Authenticeer om de vergrendeling van de token te wijzigen.", + "authenticationRequest": "Verificatieverzoek", + "biometricHint": "Authenticatie vereist", + "biometricNotRecognized": "Niet herkend. Probeer opnieuw.", + "biometricRequiredTitle": "Biometrie is niet ingesteld", + "biometricSuccess": "Authenticatie geslaagd", + "butDiscardIt": "maar verwijder", + "cancel": "Annuleren", + "checkServerCertificate": "Controleer het servercertificaat", + "checkYourNetwork": "Controleer je netwerkverbinding en probeer het opnieuw.", + "clearErrorLog": "Verwijderen", + "closeSearchTokens": "Zoekopdracht sluiten", + "confirmDeletion": "Bevestig verwijderen", + "confirmDeletionOf": "Weet u zeker dat u {name} wilt verwijderen?", + "confirmFolderDeletionHint": "Het verwijderen van een map heeft geen effect op de tokens in de map. De tokens worden verplaatst naar de hoofdlijst.", "confirmPassword": "Wachtwoord bevestigen", + "confirmTokenDeletionHint": "U kunt mogelijk niet meer inloggen als u dit token verwijdert. Controleer of u zonder dit token kunt inloggen op het gekoppelde account.", + "confirmation": "Bevestiging", + "connectionFailed": "Verbinding mislukt.", + "container": "Container", + "continueButton": "Ga verder", + "copyOTPToClipboard": "Kopieer OTP naar klembord", + "couldNotConnectToServer": "Kan geen verbinding maken met de server.", + "couldNotSignMessage": "Bericht niet kunnen ondertekenen.", + "counter": "Tegen", + "create": "Creëer", + "createdAt": "Gemaakt op", + "creator": "Schepper", + "decline": "Weigeren", + "declineIt": "weigeren", + "decrypt": "Decoderen", + "decryptErrorButtonDelete": "Verwijderen", + "decryptErrorButtonRetry": "Opnieuw proberen", + "decryptErrorButtonSendError": "Fout verzenden", + "decryptErrorContent": "Helaas heeft de app je tokens niet kunnen decoderen. Dit geeft aan dat de coderingssleutel is verbroken. U kunt het opnieuw proberen of de app-gegevens verwijderen, waardoor de tokens in de app worden verwijderd.", + "decryptErrorDeleteConfirmationContent": "Weet je zeker dat je de app-gegevens wilt verwijderen?", + "decryptErrorTitle": "Fout bij decoderen", + "delete": "Verwijderen", + "deleteLockedToken": "Verifieer om het vergrendelde token te verwijderen.", + "deviceCredentialsRequiredTitle": "Inloggevens van het apparaat zijn niet ingesteld", + "deviceCredentialsSetupDescription": "Stel de inloggegevens in, bij de instellingen van het apparaat", + "digits": "Cijfers", + "dismiss": "Sluiten", + "done": "Klaar", + "edit": "Bewerken", + "editLockedToken": "Verifieer om het vergrendelde token te bewerken.", + "editToken": "Token bewerken", + "enablePolling": "Zoeken aanzetten", + "encoding": "Codering", + "enterDetailsForToken": "Voer informatie over token in", + "enterLink": "Link invoeren", + "enterPasswordToEncrypt": "Voer een wachtwoord in om de tokens te versleutelen. Dit wachtwoord is vereist om de tokens te importeren.", + "errorLogCleared": "Foutenlogboek gewist.", + "errorLogEmpty": "Het foutenlogboek is leeg.", + "errorLogTitle": "Foutenlogboek", + "errorMailBody": "Het foutlogbestand is bijgevoegd.\nU kunt deze tekst vervangen door aanvullende informatie over de fout.", + "errorRollOutFailed": "Uitrollen van token {name} mislukt.", + "errorRollOutNoConnectionToServer": "Uitrollen mislukt. Geen verbinding met de server.", + "errorRollOutNotPossibleAnymore": "Het uitrollen van dit token is niet meer mogelijk.", + "errorRollOutSSLHandshakeFailed": "SSL-handdruk mislukt. Uitrollen niet mogelijk.", + "errorRollOutUnknownError": "Een onbekende fout heeft plaats gevonden. Uitrollen is niet mogelijk: {e}", + "errorSavingFile": "Fout bij het opslaan van het bestand", + "errorSynchronizationNoNetworkConnection": "Token synchroniseren mislukt, privacyIDEA server kan niet worden bereikt.", + "errorTokenExpired": "Het token {name} is verlopen.", + "errorUnlinkingPushToken": "Het is niet gelukt om het push token {label} te ontkoppelen.", + "errorWhenPullingChallenges": "Er is een fout opgetreden bij het zoeken naar uitdagingen van {name}", "exampleUrl": "Voer een geldige URL in zoals: \"https://example.com/\"", - "pushEndpointUrl": "Push Endpoint URL", + "expandLockedFolder": "Verifieer om de vergrendelde map te openen.", + "export": "Exporteren", + "exportAllTokens": "Alle tokens exporteren", + "exportLockedTokenReason": "Authenticeer om vergrendelde tokens te exporteren.", + "exportNonPrivacyIDEATokens": "Niet-privacyIDEA tokens exporteren", + "exportTokens": "Tokens exporteren", + "exportingTokens": "Tokens exporteren...", + "failedToLoad": "Mislukt bij het laden:", + "feedback": "Feedback", + "feedbackDescription": "Als je vragen, suggesties of problemen hebt, laat het ons dan weten.", + "feedbackHint": "Er wordt een kant-en-klare e-mail geopend die je naar ons kunt sturen. Indien gewenst wordt informatie over je apparaat en de versie van de applicatie toegevoegd. U kunt de e-mail controleren en bewerken voordat u deze verzendt.", + "feedbackPrivacyPolicy1": "Door feedback te sturen ga je akkoord met ons ", + "feedbackPrivacyPolicy2": "privacybeleid", + "feedbackPrivacyPolicy3": ".", + "feedbackSentDescription": "Hartelijk dank voor je hulp om deze applicatie beter te maken!", + "feedbackSentTitle": "Feedback verzonden", + "feedbackTitle": "Uw feedback is altijd welkom!", + "fileSavedToDownloadsFolder": "Bestand opgeslagen in de map Downloads", + "findingQrCodeInImage": "Op zoek naar QR code in afbeelding...", + "firebaseToken": "Firebase Token", + "folderName": "Mapnaam", + "generatingPhonePart": "Genereren telefoon gedeelte", + "generatingRSAKeyPair": "Genereren RSA sleutelpaar", + "generatingRSAKeyPairFailed": "Genereren RSA sleutelpaar mislukt", + "goToSettingsButton": "Ga naar instellingen", + "goToSettingsDescription": "Authenticatie via inloggegevens of biometrie is niet ingesteld. Stel het in bij de instellingen van het apparaat.", + "grantCameraPermissionDialogButton": "Toestemming verlenen", + "grantCameraPermissionDialogContent": "Geef de camera toestemming om QR-codes te scannen.", + "grantCameraPermissionDialogPermanentlyDenied": "Cameratoestemming is permanent geweigerd. Geef de camera toestemming in de instellingen van uw telefoon.", + "grantCameraPermissionDialogTitle": "Cameratoestemming is niet verleend", + "handshakeFailed": "Handshake mislukt", + "hidePushTokens": "Verberg push tokens", + "hidePushTokensDescription": "Verberg push tokens uit de token lijst. Hierdoor worden de tokens niet verwijderd en blijven ze zichtbaar op een apart scherm.", + "imageUrl": "Afbeeldings-URL", + "importConflictToken": "{count, plural, zero{Er is geen conflict met tokens die al bestaan.} one{Er is een conflict met tokens die al bestaan.Selecteer welke u wilt behouden.} other{Er is een conflict met tokens die al bestaan.Selecteer welke u wilt behouden.}}", + "importExistingToken": "{count, plural, zero{Er is geen token gevonden dat al in de toepassing aanwezig is.} one{Er is een token gevonden dat al bestaat in de applicatie.} other{{count} tokens gevonden die al in de applicatie staan.}}", + "importExportTokens": "Tokens importeren/exporteren", + "importFailedToken": "{count, plural, zero{Geen token Niet geïmporteerd.} one{Kan geen token importeren.} other{Kan {count} tokens niet importeren.}}", + "importHint2FAS": "Selecteer uw 2FAS-back-up. Als u geen back-up hebt, maak er dan een aan in de 2FAS-app. Wij raden u aan een wachtwoord te gebruiken.", + "importHintAegisBackupFile": "Selecteer uw Aegis-export (.JSON).Als u geen export hebt, maak er dan een aan via het instellingenmenu in de Aegis-app. Het gebruik van een wachtwoord wordt aanbevolen.", + "importHintAegisLink": "Voer de link in die u ontvangt wanneer u vermeldingen van Aegis overdraagt.", + "importHintAegisQrScan": "Scan de QR-code die u ontvangt bij het overbrengen van items uit Aegis.", + "importHintAuthenticatorProFile": "Om een back-up te maken van de Authenticator Pro app, navigeer je naar de instellingen en tik je op \"Auto back-up\". Selecteer een opslaglocatie en stel een wachtwoord in. Druk vervolgens op \"Nu back-uppen\" om de tokens te exporteren.", + "importHintFreeOtpPlusFile": "Om een back-up van de FreeOTP+ app te maken, tikt u op de drie puntjes in de rechterbovenhoek en selecteert u \"Exporteren\". U kunt kiezen tussen JSON en URI formaat. We raden u aan de back-up te verwijderen na het importeren, omdat deze niet versleuteld is.", + "importHintFreeOtpPlusQrScan": "Scan de QR-code die u ontvangt wanneer u op de drie stippen in de tegel van de token drukt en selecteer \"QR-code delen\".", + "importHintGoogleQrFile": "Selecteer een afbeeldingsbestand met de QR-code die u ontvangt wanneer u uw accounts exporteert vanuit Google Authenticator.\n!! Let op: het is niet veilig om de QR-code op je apparaat op te slaan, omdat de tokens niet versleuteld zijn !!", + "importHintGoogleQrScan": "Scan de QR-code die u ontvangt wanneer u uw accounts exporteert vanuit Google Authenticator.", + "importHintPrivacyIdeaFile": "Om een back-up te maken, ga je naar de instellingen en tik je op \"Exporteren\". Selecteer \"Als bestand\" en selecteer de tokens die je wilt exporteren. Tik dan op \"Exporteren\" en stel een wachtwoord in. De opslaglocatie is de downloadmap op je apparaat.", + "importHintPrivacyIdeaQrScan": "Om QR-codes van de tokens te maken, navigeer je naar de instellingen en tik je op \"Exporteren\". Selecteer vervolgens \"Als QR-code\" en tik op het muntje dat geëxporteerd moet worden. Deze variant is alleen geschikt voor directe overdracht naar een ander apparaat, omdat de QR-code niet versleuteld is.", + "importNTokens": "{count, plural, zero{Geen tokens importeren} one{Eén token importeren} other{Importeer {count} tokens}}", + "importNewToken": "{count, plural, zero{Er is geen nieuw token gevonden.} one{Er is een nieuw token gevonden dat geïmporteerd kan worden.} other{Er zijn {count} nieuwe tokens gevonden die geïmporteerd kunnen worden.}}", + "importTokens": "Importer un jeton", + "importedVia": "Geïmporteerd via", + "increaseCounter": "Verhoog teller", + "internalServerError": "Interne serverfout ({code})", + "introAddFolder": "Je kunt mappen maken om je tokens te organiseren.", + "introAddTokenManually": "Als je geen QR-code wilt scannen, kun je tokens ook handmatig toevoegen.", + "introDragToken": "Reorganiseer je tokens door er een paar seconden op te drukken en het dan naar de gewenste positie te slepen.", + "introEditToken": "Hier kun je de naam van het token bewerken en enkele details bekijken.", + "introHidePushTokens": "Je push tokens zijn nu verborgen, maar je kunt ze nog steeds zien op het push token scherm.", + "introLockToken": "Om de beveiliging nog meer te verbeteren, kun je tokens vergrendelen.¨Dan kan het token alleen gebruikt worden na authenticatie.", + "introPollForChallenges": "Je kunt controleren of er nieuwe uitdagingen zijn door de lijst met tokens naar beneden te slepen.", + "introScanQrCode": "Je kunt QR-codes scannen om tokens toe te voegen.We ondersteunen alle gangbare Two-Factor-Authenticatie tokens en ook de privacyIDEA tokens.", + "introTokenSwipe": "Veeg tokens naar links om beschikbare acties te zien.", + "invalidBackupFile": "Het geselecteerde bestand is geen geldige backup van {appName}.", + "invalidLink": "De ingevoerde link is geen geldig token van {appName}, of wordt niet ondersteund.", + "invalidQrFile": "Het geselecteerde bestand bevat geen geldige QR code van {appName}.", + "invalidQrScan": "De gescande QR code is geen geldige backup van {appName}.", + "invalidValue": "untranslated", + "invalidValueIn": "untranslated", + "isExpotableQuestion": "Is exporteerbaar?", + "isPiTokenQuestion": "Is het een privacyIDEA token?", + "language": "Taal", + "legacySigningErrorMessage": "Het token is aangemaakt in een verouderde versie van de app, wat kan leiden tot problemen bij het gebruik ervan.\nHet wordt aanbevolen om een nieuw push token aan te maken als het probleem zich blijft voordoen!", + "legacySigningErrorTitle": "Er is een fout opgetreden bij het gebruik van het verouderde token: {tokenLabel}", + "licenses": "Licenties", + "licensesAndVersion": "Licenties en versie", + "linkedContainer": "Gekoppelde container", + "lock": "Vergrendel", + "lockOut": "Biometrische authenticatie staat uit. Vergrendel en ontgrendel het scherm om het aan te zetten.", + "logMenu": "Log menu", + "malformedData": "De QR code bevat onjuiste gegevens.", + "markQrCode": "Markeer QR Code", + "missingRequiredParameter": "De waarde voor de parameter [{parameter}] is vereist, maar ontbreekt.", + "missingRequiredParameterIn": "De waarde voor de parameter [{parameter}] is vereist, maar ontbreekt in \"{map}\".", "mustNotBeEmpty": "{field} mag niet leeg zijn", - "@mustNotBeEmpty": { - "placeholders": { - "field": { - "example": "Name" - } - } - }, - "sendPushRequestResponseFailed": "Het verzenden van het antwoord is mislukt. ", - "@sendPushRequestResponseFailed": { - "description": "Error message when the response to a push request could not be sent." - }, + "name": "Naam", + "no": "Nee", + "noFbToken": "Geen Firebase Token beschikbaar", + "noMailAppDescription": "Er is geen e-mail app geïnstalleerd of geïnitialiseerd op dit apparaat, probeer het opnieuw wanneer u in staat bent om een e-mailbericht te verzenden.", + "noMailAppTitle": "Geen mail app gevonden", + "noNetworkConnection": "Geen netwerkverbinding.", + "noPublicKey": "Geen openbare sleutel beschikbaar", + "noResultText1": "Tik op ", + "noResultText2": " de knop om te beginnen!", + "noResultTitle": "Nog geen token opgeslagen.", + "noTokenToExport": "Geen token beschikbaar voor export", + "notAnInteger": "De waarde is geen geheel getal.", + "notAnNumber": "De waarde is geen getal.", + "ok": "Ok", + "oneMore": "Nog een", + "open": "Openen", + "optionalMessage": "Optioneel bericht", + "originApp": "Oorsprong app", + "originDetails": "Details over de oorsprong", + "otpValueCopiedMessage": "Wachtwoord \"{otpValue}\" gekopieerd naar het klembord.", + "parsingResponse": "Antwoord analyseren", + "parsingResponseFailed": "Antwoord analyseren mislukt", + "password": "Wachtwoord", "passwordCannotBeEmpty": "Wachtwoord mag niet leeg zijn", - "passwordMustBeAtLeast8Characters": "Wachtwoord moet minimaal 8 tekens lang zijn", "passwordCannotContainWhitespace": "Wachtwoord mag geen spaties bevatten", + "passwordMustBeAtLeast8Characters": "Wachtwoord moet minimaal 8 tekens lang zijn", "passwordMustContainLowercaseLetter": "Wachtwoord moet een kleine letter bevatten", - "passwordMustContainUppercaseLetter": "Wachtwoord moet een hoofdletter bevatten", "passwordMustContainNumber": "Wachtwoord moet een cijfer bevatten", "passwordMustContainSpecialCharacter": "Wachtwoord moet een speciaal teken bevatten", + "passwordMustContainUppercaseLetter": "Wachtwoord moet een hoofdletter bevatten", "passwordsDoNotMatch": "Wachtwoorden komen niet overeen", - "selectTokensToExportHelpTitle": "Staat jouw token er niet bij?", - "selectTokensToExportHelpContent": "Als een token niet in de lijst staat, is het niet gegarandeerd dat het geen privacyIDEA token is.\nMomenteel kunnen alleen handmatig toegevoegde en geïmporteerde tokens worden geëxporteerd.", - "findingQrCodeInImage": "Op zoek naar QR code in afbeelding...", - "qrNotFound": "Geen QR code gevonden!", + "patchNotesBugFixes": "Bugfixes", + "patchNotesDialogTitle": "Wat is er nieuw?", + "patchNotesImprovements": "Verbeteringen", + "patchNotesNewFeatures": "Nieuwe functies", + "patchNotesV4_3_0NewFeatures1": "Ondersteuning toegevoegd voor het importeren van tokens van Google, Aegis en 2FAS Authenticator. Meer importbronnen zullen in de toekomst worden toegevoegd.", + "patchNotesV4_3_0NewFeatures2": "Feedbackoptie toegevoegd aan de instellingen.", + "patchNotesV4_3_0NewFeatures3": "Push tokens kunnen nu verborgen worden in de tokenlijst.", + "patchNotesV4_3_0NewFeatures4": "Introducties zijn toegevoegd om nieuwe gebruikers op weg te helpen.", + "patchNotesV4_3_0NewFeatures5": "Je kunt nu naar tokens zoeken door op het vergrootglas in de rechterbovenhoek te tikken.", + "patchNotesV4_3_0NewFeatures6": "HomeWidget Token toegevoegd voor Android 12 en hoger.", + "patchNotesV4_3_1BugFix1": "Een probleem is opgelost waarbij de otp-waarde niet werd weergegeven na authenticatie op sommige apparaten.", + "patchNotesV4_3_1Improvement1": "De QR-code scanner is verbeterd.", + "patchNotesV4_4_0Improvement1": "Er zijn meer invoerbronnen toegevoegd.", + "patchNotesV4_4_0Improvement2": "De herkenning van QR-codes uit afbeeldingsbestanden is verbeterd.", + "patchNotesV4_4_0NewFeatures1": "Het is nu mogelijk om tokens te exporteren waarvan kan worden gegarandeerd dat het geen privacyIDEA tokens zijn. Op dit moment kan niet worden uitgesloten dat tokens die zijn toegevoegd via de QR-code scanner afkomstig zijn van privacyIDEA. De differentiatie zal in toekomstige versies worden verbeterd.", + "patchNotesV4_4_0NewFeatures2": "Ondersteuning toegevoegd voor privacyIDEA's \"require presence\".", + "period": "Duur", + "phonePart": "Telefoon gedeelte:", + "pleaseEnterANameForThisToken": "Voer de naam in voor deze token.", + "pleaseEnterASecretForThisToken": "Voer de geheime sleutel in voor deze token.", + "pleaseSyncManuallyWhenNetworkIsAvailable": "Synchroniseer de push tokens handmatig via de instellingen als er een netwerkverbinding beschikbaar is.", + "pollingChallenges": "Zoeken naar nieuwe aanvragen", + "pollingFailed": "Vraag mislukt.", + "pollingFailedFor": "Query voor {serial} mislukt.", + "privacyPolicy": "Privacybeleid", + "publicKey": "Openbare sleutel", + "pushEndpointUrl": "Push Endpoint URL", + "pushRequestParseError": "Het pushverzoek kon niet worden verwerkt.", + "pushToken": "Push Token", + "pushTokens": "Push Tokens", + "qrFileDecodeError": "Het was niet mogelijk om de QR code te decoderen van de geselecteerde afbeelding, gebruik in plaats daarvan de QR code scanner.", "qrInFileNotFound": "Er is geen QR code gevonden in de geselecteerde afbeelding.", "qrInFileNotFound2": "U kunt mij laten zien waar de QR code is.", "qrInFileNotFound3": "Ik verwacht dat ik de code zal vinden als het in het midden van het gemarkeerde gebied is.", - "markQrCode": "Markeer QR Code", - "malformedData": "De QR code bevat onjuiste gegevens." + "qrNotFound": "Geen QR code gevonden!", + "qrScan": "Scan", + "rename": "Wijzigen", + "renameToken": "Hernoem token", + "renameTokenFolder": "Map hernoemen", + "requestInfo": "Verzonden door {issuer} voor uw account: \"{account}\"", + "requestPushChallengesPeriodically": "Activeer het zoeken naar berichten. Gebruik deze optie wanneer de push berichten niet worden ontvangen.", + "requestTriggerdByUserQuestion": "Is dit verzoek door jou gedaan?", + "retryRollout": "Opnieuw uitrollen", + "rolloutCompleted": "Uitrollen voltooid", + "save": "Opslaan", + "scanQrCode": "Scan QR-Code", + "scanThisQrWithNewDevice": "Scan deze QR-code met uw nieuwe apparaat om de token te importeren.", + "searchTokens": "Zoek tokens", + "secretIsRequired": "Geheim is vereist", + "secretKey": "Geheime sleutel", + "selectFile": "Selecteer bestand", + "selectImportSource": "Selecteer importbron", + "selectImportType": "Hoe wilt u de tokens importeren?", + "selectTokensToExport": "{count, plural, zero{} one{Selecteer token om te exporteren} other{Selecteer tokens om te exporteren}}", + "selectTokensToExportHelpContent": "Als een token niet in de lijst staat, is het niet gegarandeerd dat het geen privacyIDEA token is.\nMomenteel kunnen alleen handmatig toegevoegde en geïmporteerde tokens worden geëxporteerd.", + "selectTokensToExportHelpTitle": "Staat jouw token er niet bij?", + "send": "verzenden", + "sendErrorDialogBody": "Een onverwachte fout heeft plaatsgevonden in de applicatie. De onderstaande informatie kan worden verstuurd naar de ontwikkelaars via e-mail om het probleem in de toekomst te voorkomen.", + "sendErrorLogDescription": "Er wordt een kant-en-klare e-mail gemaakt die informatie bevat over de app, de fout en het apparaat.\nJe kunt de e-mail bewerken voordat je hem verstuurt.\nJe kunt hier zien hoe we de informatie gebruiken:", + "sendPushRequestResponseFailed": "Het verzenden van het antwoord is mislukt. ", + "sendingRSAPublicKey": "Versturen van de openbare RSA sleutel", + "sendingRSAPublicKeyFailed": "Versturen van de openbare RSA sleutel mislukt", + "serverNotReachable": "De server kon niet worden bereikt.", + "settings": "Instellingen", + "settingsGroupGeneral": "Algemene informatie", + "showDetails": "Details tonen", + "showErrorLog": "Weergeven", + "showPrivacyPolicy": "Privacybeleid tonen", + "signInTitle": "Authenticatie vereist", + "someTokensDoNotSupportPolling": "Sommige tokens zijn verouderd en ondersteunen geen actief zoeken", + "startRollout": "Start uitrollen", + "statusCode": "Statuscode: {statusCode}", + "sync": "Synchroniseer", + "syncContainerFailed": "Container synchronisatie mislukt", + "syncFbTokenFailed": "Synchroniseren mislukt voor de volgende tokens, probeer het opnieuw:", + "synchronizePushTokens": "Synchroniseer push tokens", + "synchronizesTokensWithServer": "Synchroniseert tokens met de privacyIDEA server.", + "synchronizingTokens": "Tokens synchroniseren.", + "theSecretDoesNotFitTheCurrentEncoding": "De geheime sleutel past niet bij de huidige codering", + "themeMode": "Thema", + "thisAppIsOpenSource": "Deze app is open source\nBezoek ons op GitHub", + "timeOut": "Time-out", + "tokenDataParseError": "Token-gegevens konden niet worden verwerkt", + "tokenDetails": "Details van de token", + "tokenLink": "tokenlink", + "tokenSerial": "Token serial", + "tokensAreEncrypted": "De tokens zijn gecodeerd. Voer het wachtwoord in om ze te decoderen.", + "tokensDoNotSupportSynchronization": "Voor de volgende tokens wordt synchroniseren niet ondersteunt, ze moeten opnieuw worden aangeleverd:", + "tokensNotEncrypted": "De tokens zijn niet versleuteld en kunnen direct worden geïmporteerd.", + "tokensSuccessfullyDecrypted": "De tokens zijn succesvol gedecodeerd en kunnen nu worden geïmporteerd.", + "type": "Type", + "unexpectedError": "Er is een onverwachte fout opgetreden.", + "unknown": "Onbekend", + "unlock": "Ontgrendel", + "unsupported": "De {name} [{value}] wordt niet ondersteund door deze versie van de app.", + "useDeviceLocaleDescription": "Gebruik de taal van het apparaat wanneer het wordt ondersteund, val anders terug op Engels.", + "useDeviceLocaleTitle": "Gebruik de taal van het apparaat", + "validFor": "Geldig voor", + "validUntil": "Geldig tot", + "valueNotAllowed": "untranslated", + "valueNotAllowedIn": "untranslated", + "verboseLogging": "Verbose loggen", + "version": "Versie", + "wrongPassword": "Onjuist wachtwoord", + "yes": "Ja" } \ No newline at end of file diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index d955a503c..e03918b4b 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -1,377 +1,362 @@ { - "@@last_modified": "2023-08-07", - "patchNotesNewFeatures": "Nowe funkcje", - "patchNotesImprovements": "Ulepszenia", - "patchNotesBugFixes": "Poprawki błędów", - "patchNotesV4_4_0NewFeatures1": "Możliwe jest teraz eksportowanie tokenów, w przypadku których można upewnić się, że nie są to tokeny privacyIDEA. Obecnie nie można wykluczyć, że tokeny dodane za pomocą skanera kodów QR pochodzą z privacyIDEA. Rozróżnienie to zostanie poprawione w przyszłych wersjach", - "patchNotesV4_4_0NewFeatures2": "Dodano obsługę funkcji privacyIDEA \"require presence\".", - "patchNotesV4_4_0Improvement1": "Dodano kolejne źródła importu.", - "patchNotesV4_4_0Improvement2": "Ulepszono rozpoznawanie kodów QR z plików graficznych.", - "patchNotesV4_3_1BugFix1": "Został naprawiony problem, w którym wartość OTP nie była wyświetlana po uwierzytelnieniu na niektórych urządzeniach.", - "patchNotesV4_3_1Improvement1": "Został poprawiony skaner kodów QR.", - "patchNotesV4_3_0NewFeatures1": "Dodano obsługę importowania tokenów z Google, Aegis i 2FAS Authenticator. Więcej źródeł importu zostanie dodanych w przyszłości", - "patchNotesV4_3_0NewFeatures2": "Dodano opcję opinii do ustawień.", - "patchNotesV4_3_0NewFeatures3": "Tokeny push można teraz ukryć na liście tokenów", - "patchNotesV4_3_0NewFeatures4": "Dodano wprowadzenia, aby ułatwić nowym użytkownikom rozpoczęcie pracy.", - "patchNotesV4_3_0NewFeatures5": "Możesz teraz wyszukiwać tokeny, dotykając szkła powiększającego w prawym górnym rogu.", - "patchNotesV4_3_0NewFeatures6": "Dodano token HomeWidget dla systemu Android 12 i nowszych.", - "guide": "Przewodnik", - "@guide": { - "description": "Button to open the guide screen." - }, - "accept": "Potwierdzam", + "@@last_modified": "2024-09-20", + "@@locale": "pl", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." }, - "decline": "Odrzucam", - "@decline": { - "description": "Label for e.g. a button. Something gets declined by the user." - }, - "name": "Nazwa", - "@name": { - "description": "Describes the field where the tokens name should be entered." - }, - "secretKey": "Tajny klucz", - "@secretKey": { - "description": "Describes the field where the tokens secret should be entered." - }, - "encoding": "Kodowanie", - "@encoding": { - "description": "Title of the dropdown button where the encoding is selected." + "@addToken": { + "description": "The button to open the screen to add tokens by hand." }, - "algorithm": "Algorytm", "@algorithm": { "description": "Title of the dropdown button where the encoding is selected." }, - "digits": "Ilość cyfr", - "@digits": { - "description": "Title of the dropdown button where the number of digits for the opt value is selected." + "@algorithmUnsupported": { + "placeholders": { + "algorithm": { + "example": "MD5" + } + } }, - "type": "Typ", - "@type": { - "description": "Title of the dropdown button where the type of the token is selected." + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." }, - "period": "Cykl", - "@period": { - "description": "Title of the dropdown button where the period of the totp token is selected." + "@authNotSupportedBody": { + "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." }, - "rename": "Zmień nazwę", - "@rename": { - "description": "Label that describes renaming the token." + "@authNotSupportedTitle": { + "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." }, - "cancel": "Anuluj", - "@cancel": { - "description": "Button to cancel an action." + "@authToAcceptPushRequest": { + "description": "Message to accepting a push request for authentication." }, - "delete": "Usuń", - "@delete": { - "description": "Label that describes deleting the token." + "@authToDeclinePushRequest": { + "description": "Message for declining a push request for authentication." }, - "dismiss": "Odrzuć", - "@dismiss": { - "description": "Text of a button that closes a dialog." + "@authenticateToShowOtp": { + "description": "Reason to authenticate when trying to view a one time password." }, - "addToken": "Dodaj token", - "@addToken": { - "description": "The button to open the screen to add tokens by hand." + "@authenticateToUnLockToken": { + "description": "Reason to authenticate when trying to lock or unlock a token." }, - "scanQrCode": "Zeskanuj kod QR", - "@scanQrCode": { - "description": "The button to scan otpauth qr-codes." + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, - "enterDetailsForToken": "Wprowadź szczegóły dla tokenu", - "@enterDetailsForToken": { - "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." + "@biometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterANameForThisToken": "Wprowadź nazwę dla tokenu", - "@pleaseEnterANameForThisToken": { - "description": "Hint telling the user to enter a name for a token." + "@biometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." }, - "pleaseEnterASecretForThisToken": "Wprowadź sekret dla tokenu", - "@pleaseEnterASecretForThisToken": { - "description": "Hint telling the user to enter a secret for a token." + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, - "theSecretDoesNotFitTheCurrentEncoding": "Sekret nie odpowiada wybranemu sposobowi kodowania.", - "@theSecretDoesNotFitTheCurrentEncoding": { - "description": "Hint telling the user that the secret does not fit the selected encoding." + "@cancel": { + "description": "Button to cancel an action." }, - "renameToken": "Zmień nazwę tokenu", - "@renameToken": { - "description": "Title of the dialog where a new name for a token can be entered." + "@checkServerCertificate": { + "description": "Error message when the server certificate should be checked." + }, + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "@clearErrorLog": { + "description": "Button to clear the error log." }, - "confirmDeletion": "Potwierdź usunięcie", "@confirmDeletion": { "description": "Title of the dialog where a token can be deleted." }, - "confirmDeletionOf": "Jesteś pewien, że chcesz usunąć token: {name}?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234" } - } - }, - "confirmTokenDeletionHint": "Usunięcie tego tokenu może uniemożliwić zalogowanie się. Upewnij się, że możesz zalogować się na powiązane konto bez tego tokenu.", - "@confirmTokenDeletionHint": { - "description": "Gives the user a hint about the consequences of deleting a token." + }, + "type": "text" }, - "confirmFolderDeletionHint": "Usunięcie folderu nie ma wpływu na znajdujące się w nim tokeny. Tokeny są przenoszone do głównej listy.", "@confirmFolderDeletionHint": { "description": "Gives the user a hint about the consequences of deleting a folder." }, - "generatingPhonePart": "Generowanie sekretu po stronie telefonu...", - "@generatingPhonePart": { - "description": "Title of a dialog telling the user that the phone part gets generated right now." + "@confirmTokenDeletionHint": { + "description": "Gives the user a hint about the consequences of deleting a token." }, - "phonePart": "Sekret po stronie telefonu:", - "@phonePart": { - "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + "@connectionFailed": { + "description": "Tells the user that the connection failed." }, - "otpValueCopiedMessage": "Jednorazowe hasło \"{otpValue}\" skopiowane do schowka.", - "@otpValueCopiedMessage": { - "description": "Tells the user that the otp value was copied to the clipboard.", - "type": "text", - "placeholders": { - "otpValue": { - "example": "055374" - } - } + "@container": { + "description": "Title for the container view." }, - "settings": "Ustawienia", - "@settings": { - "description": "Button to open the settings page." + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." }, - "pushToken": "Push token", - "@pushToken": { - "description": "Title for the settings block concerning the push tokens." + "@counter": { + "description": "Describes the field where the tokens counter should be entered." }, - "theme": "Motyw", - "@theme": { - "description": "Title of the setting group where the theme can be selected." + "@createdAt": { + "description": "Label for the creation date of the token." }, - "lightTheme": "Jasny", - "@lightTheme": { - "description": "The light theme." + "@creator": { + "description": "Label for the creator of the token." }, - "darkTheme": "Ciemny", "@darkTheme": { "description": "The dark theme." }, - "systemTheme": "Motyw systemu", - "@systemTheme": { - "description": "The systems theme." + "@decline": { + "description": "Label for e.g. a button. Something gets declined by the user." }, - "someTokensDoNotSupportPolling": "Część tokenów jest przestarzała i nie wspiera aktywnego zapytania dla autentykacji przez wiadomość push.", - "@someTokensDoNotSupportPolling": { - "description": "Tells the user, that the following tokens do not support polling.", - "type": "text", - "placeholders": {} + "@delete": { + "description": "Label that describes deleting the token." }, - "enablePolling": "Włącz autentykację przez wiadomość push.", - "@enablePolling": { - "description": "Name of the setting switch that enables polling." + "@deviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." }, - "requestPushChallengesPeriodically": "Wysyłaj zapytanie o push challenge cyklicznie. Włącz, jeśli push nie przychodzi normalnie.", - "@requestPushChallengesPeriodically": { - "description": "The description of the polling feature." + "@deviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." }, - "synchronizePushTokens": "Synchronizuj tokeny push.", - "@synchronizePushTokens": { - "description": "Title of synchronizing push tokens in settings." + "@digits": { + "description": "Title of the dropdown button where the number of digits for the opt value is selected." }, - "synchronizesTokensWithServer": "Synchronizuje tokeny push z serwerem privacyIDEA.", - "@synchronizesTokensWithServer": { - "description": "Description of synchronizing push tokens in settings." + "@dismiss": { + "description": "Text of a button that closes a dialog." }, - "sync": "Synchronizuj", - "@sync": { - "description": "Text of button that is used to synchronize push tokens." + "@enablePolling": { + "description": "Name of the setting switch that enables polling." }, - "synchronizingTokens": "Synchronizacja tokenów.", - "@synchronizingTokens": { - "description": "Title of the push synchronization dialog." + "@encoding": { + "description": "Title of the dropdown button where the encoding is selected." }, - "allTokensSynchronized": "Wszystkie tokeny są zsynchronizowane.", - "@allTokensSynchronized": { - "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + "@enterDetailsForToken": { + "description": "Title of the screen where tokens are created manually, tells the user to enter all required values." }, - "syncFbTokenFailed": "Synchronizacja dla poniższych tokenów się nie udała, spróbuj ponownie:", - "@syncFbTokenFailed": { - "description": "Headline for the list of tokens where the synchronization failed." + "@errorLogCleared": { + "description": "Message that tells the user that the error log was cleared." }, - "tokensDoNotSupportSynchronization": "Następujące tokeny nie wspierają synchronizacji i muszą zostać wdrożone od nowa:", - "@tokensDoNotSupportSynchronization": { - "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + "@errorLogEmpty": { + "description": "Message that tells the user that the error log is empty." + }, + "@errorLogTitle": { + "description": "Title of the error log screen." + }, + "@errorMailBody": { + "description": "Message for email body" }, - "errorRollOutFailed": "Wdrażanie tokenu {name} nieudane.", "@errorRollOutFailed": { "description": "Tells the user that the token could not be rolled out, because a network error occurred.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234A" } - } + }, + "type": "text" }, - "statusCode": "Kod statusu: {statusCode}", - "@statusCode": { - "description": "Tells the user the status code of the error.", + "@errorRollOutNoConnectionToServer": { + "description": "Message for the rollout process", "placeholders": { - "statusCode": { - "example": "400" + "name": { + "example": "PUSH1234A" } } }, - "errorSynchronizationNoNetworkConnection": "Synchronizacja tokenów push nieudana, ponieważ serwer privacyIDEA jest nieosiągalny.", - "@errorSynchronizationNoNetworkConnection": { - "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." }, - "errorRollOutUnknownError": "Napotkano nieznany błąd. Wdrożenie tokenu niemożliwe: {e}", "@errorRollOutUnknownError": { "description": "Tells the user that the roll-out failed because of an unknown error.", - "type": "text", "placeholders": { "e": { "example": "IllegalArgumentException on Line 5 ..." } - } - }, - "startRollout": "Rozpocznij wdrożenie", - "@startRollout": { - "description": "Label that tells the user that the token is being rolled out." - }, - "pollingChallenges": "Sprawdzanie nowych wyzwań", - "@pollingChallenges": { + }, "type": "text" }, - "unexpectedError": "Wystąpił nieoczekiwany błąd.", - "@unexpectedError": { - "description": "Title of page report mode." + "@errorSynchronizationNoNetworkConnection": { + "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, - "pollingFailed": "Zapytanie nie powiodło się.", - "@pollingFailed": { - "description": "Tells the user that the polling failed." + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "pollingFailedFor": "Zapytanie dla {serial} nie powiodło się.", - "@pollingFailedFor": { - "description": "Tells the user that the polling failed.", + "@errorUnlinkingPushToken": { + "description": "Error message when unlinking a push token failed.", "placeholders": { - "serial": { + "label": { "example": "PUSH1234A" } } }, - "noNetworkConnection": "Brak połączenia sieciowego.", - "@noNetworkConnection": { - "description": "Tells the user that there is no network connection." + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } }, - "connectionFailed": "Połączenie nie powiodło się.", - "@connectionFailed": { - "description": "Tells the user that the connection failed." + "@failedToLoad": { + "placeholders": { + "name": { + "example": "token data" + } + } }, - "checkYourNetwork": "Sprawdź połączenie sieciowe i spróbuj ponownie.", - "@checkYourNetwork": { - "description": "Tells the user to check the network connection." + "@feedbackPrivacyPolicy2": { + "description": "Tapnięcie na to powinno otworzyć politykę prywatności." }, - "serverNotReachable": "Nie można uzyskać połączenia z serwerem.", - "@serverNotReachable": { - "description": "Tells the user that the server could not be reached." + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." }, - "couldNotSignMessage": "Nie można podpisać wiadomości.", - "@couldNotSignMessage": { - "description": "Tells the user that the message could not be signed." + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" }, - "useDeviceLocaleTitle": "Użyj języka urządzenia.", - "@useDeviceLocaleTitle": { - "description": "Title of the switch tile where using the devices language can be enabled." + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" }, - "useDeviceLocaleDescription": "Użyj języka urządzenia, jeśli jest wspierany. W innym wypadku zostanie ustawiony domyślny język angielski.", - "@useDeviceLocaleDescription": { - "description": "Description of the switch tile where using the devices language can be enabled." + "@goToSettingsButton": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." }, - "language": "Język", - "@language": { - "description": "Title of language setting group." + "@goToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." }, - "authenticateToShowOtp": "Zweryfikuj tożsamość, by pokazać hasło jednorazowe.", - "@authenticateToShowOtp": { - "description": "Reason to authenticate when trying to view a one time password." + "@guide": { + "description": "Button to open the guide screen." }, - "authenticateToUnLockToken": "Zweryfikuj tożsamość, aby odblokować / zablokować token.", - "@authenticateToUnLockToken": { - "description": "Reason to authenticate when trying to lock or unlock a token." + "@handshakeFailed": { + "description": "Error message when the handshake failed." }, - "biometricRequiredTitle": "Uwierzytelnianie biometryczne nie jest skonfigurowane.", - "@biometricRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + "@importedVia": { + "description": "Label for the import method of the token." }, - "biometricHint": "Wymagana autentykacja", - "@biometricHint": { - "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + "@internalServerError": { + "placeholders": { + "code": { + "example": "500" + } + } }, - "biometricNotRecognized": "Nie rozpoznano. Spróbuj ponownie.", - "@biometricNotRecognized": { - "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + "@invalidValue": { + "description": "Error message when the value is not valid for the parameter.", + "placeholders": { + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "biometricSuccess": "Autentykacja zakończona sukcesem!", - "@biometricSuccess": { - "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + "@invalidValueIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "5" + } + } }, - "deviceCredentialsRequiredTitle": "Ustawienia zabezpieczeń urządzenia nie zostały skonfigurowane.", - "@deviceCredentialsRequiredTitle": { - "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + "@isExpotableQuestion": { + "description": "Label for the question if the token is exportable." }, - "deviceCredentialsSetupDescription": "Skonfiguruj ustawienia zabezpieczeń w ustawieniach urządzenia.", - "@deviceCredentialsSetupDescription": { - "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + "@isPiTokenQuestion": { + "description": "Label for the question if the token is a privacyIDEA token." }, - "signInTitle": "Wymagana autentykacja", - "@signInTitle": { - "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + "@language": { + "description": "Title of language setting group." }, - "goToSettingsButton": "Idź do ustawień", - "@goToSettingsButton": { - "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + "@legacySigningErrorMessage": { + "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." }, - "goToSettingsDescription": "Ustawienia zabezpieczeń, bądź uwierzytelnianie biometryczne nie są skonfigurowane w twoim urządzeniu. Skonfiguruj je w ustawieniach urządzenia.", - "@goToSettingsDescription": { - "description": "Message advising the user to go to the settings and configure device credentials or biometrics on their device." + "@legacySigningErrorTitle": { + "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", + "placeholders": { + "tokenLabel": { + "example": "PUSH1234A" + } + } + }, + "@lightTheme": { + "description": "The light theme." + }, + "@linkedContainer": { + "description": "Label for the linked container serial number." + }, + "@lock": { + "description": "Description of button that locks a token." }, - "lockOut": "Uwierzytelnianie biometryczne jest wyłączone. Zablokuj i odblokuj ponownie ekran, żeby je włączyć.", "@lockOut": { "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." }, - "authNotSupportedTitle": "Skonfigurowane ustawienia zabezpieczeń albo uwierzytelnianie biometryczne jest wymagane.", - "@authNotSupportedTitle": { - "description": "Message shown as a dialog title that tells the user that device credentials or biometrics must be setup for this action." + "@logMenu": { + "description": "Button to open the log menu." }, - "authNotSupportedBody": "To działanie wymaga skonfigurowania ustawień zabezpieczeń albo uwierzytelniania biometrycznego.", - "@authNotSupportedBody": { - "description": "Message shown as a dialog body that tells the user that device credentials or biometrics must be setup for this action." + "@malformedData": { + "description": "Error message when the data is malformed." }, - "lock": "Zablokuj", - "@lock": { - "description": "Description of button that locks a token." + "@missingRequiredParameter": { + "description": "Error message when a required parameter is missing.", + "placeholders": { + "parameter": { + "example": "counter" + } + } }, - "unlock": "Odblokuj", - "@unlock": { - "description": "Description of button that unlocks a token." + "@missingRequiredParameterIn": { + "description": "Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.Error message when a required parameter is missing in a specific map.", + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + } + } }, - "noResultTitle": "Nie zainstalowano jeszcze żadnego tokenu.", - "@noResultTitle": { - "description": "No tokens installed yet." + "@mustNotBeEmpty": { + "placeholders": { + "field": { + "example": "Name" + } + } + }, + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "@noFbToken": { + "description": "Tells the user that there is no Firebase token available." + }, + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." }, - "noResultText1": "Dotknij ", "@noResultText1": { "description": "first noresult text" }, - "noResultText2": " przycisku, żeby zacząć!", "@noResultText2": { "description": "second noresult text" }, - "onBoardingTitle1": "{appName}", + "@noResultTitle": { + "description": "No tokens installed yet." + }, + "@notAnInteger": { + "description": "Tells the user that there is no Firebase token available." + }, + "@notAnNumber": { + "description": "Error message when the user entered a value that is not a number." + }, + "@ok": { + "description": "Button to confirm an action." + }, "@onBoardingTitle1": { "placeholders": { "appName": { @@ -379,294 +364,557 @@ } } }, - "onBoardingText1": "Uwierzytelnianie dwuskładnikowe\nuczynione prostym", - "onBoardingTitle2": "Maksymalne Bezpieczeństwo", - "onBoardingText2": "Przechowuj tokeny w swoim urządzeniu\nzabezpieczone biometrycznie", - "onBoardingTitle3": "Odwiedź nas na Github", - "onBoardingText3": "Ta aplikacja jest w open source", - "errorLogTitle": "Dziennik błędów", - "logMenu": "Menu dziennika", - "showErrorLog": "Wyświetl", - "clearErrorLog": "Usuń", - "send": "Wyślij", - "sendErrorLogDescription": "Tworzona jest gotowa wiadomość e-mail zawierająca informacje o aplikacji, błędzie i urządzeniu.\nMożesz edytować wiadomość e-mail przed jej wysłaniem.\nTutaj można zobaczyć, w jaki sposób wykorzystujemy te informacje:", - "@sendErrorLogDescription": { - "description": "Explanation for the user what he will send." + "@open": { + "description": "Button to open something." }, - "showPrivacyPolicy": "Pokaż politykę prywatności", - "errorLogEmpty": "Dziennik błędów jest pusty", - "verboseLogging": "Wyczerpujące rejestrowanie", - "errorLogCleared": "Dziennik błędów wyczyszczony.", - "ok": "Ok", - "errorMailBody": "Plik dziennika błędów jest dołączony.\nTekst ten można zastąpić dodatkowymi informacjami o błędzie.", - "@errorMailBody": { - "description": "Message for email body" + "@originApp": { + "description": "Label for the origin app." }, - "showDetails": "Pokaż szczegóły", - "open": "Otwórz", - "sendErrorDialogBody": "Napotkano nieoczekiwany błąd w aplikacji. Poniższa wiadomość może zostać wysłana do deweloperów poprzez email, żeby pomóc uniknąć tego problemu w przyszłości.", - "@sendErrorDialogBody": { - "description": "Description shown to the user about what info the error report contains." + "@originDetails": { + "description": "Title of the origin details menu." }, - "noFbToken": "Brak dostępnego tokena Firebase", - "firebaseToken": "Token Firebase", - "noPublicKey": "Brak dostępnego klucza publicznego", - "publicKey": "Klucz publiczny", - "editToken": "Edytuj token", - "edit": "Edytuj", - "save": "Zapisz", - "create": "Utwórz", - "validFor": "Ważny przez", - "validUntil": "Ważny do", - "deleteLockedToken": "Uwierzytelnij, aby usunąć zablokowany token.", - "editLockedToken": "Aby edytować zablokowany token, należy się uwierzytelnić.", - "expandLockedFolder": "Uwierzytelnij, aby otworzyć zablokowany folder.", - "renameTokenFolder": "Zmiana nazwy folderu", - "addANewFolder": "Utwórz nowy folder", - "folderName": "Nazwa folderu", - "retryRollout": "Ponowne uruchomienie", - "generatingRSAKeyPair": "Generowanie pary kluczy RSA", - "@generatingRSAKeyPair": { - "description": "Message for the rollout process" + "@otpValueCopiedMessage": { + "description": "Tells the user that the otp value was copied to the clipboard.", + "placeholders": { + "otpValue": { + "example": "055374" + } + }, + "type": "text" }, - "generatingRSAKeyPairFailed": "Generowanie pary kluczy RSA nieudane", - "@generatingRSAKeyPairFailed": { + "@parsingResponse": { "description": "Message for the rollout process" }, - "sendingRSAPublicKey": "Wysyłanie publicznego klucza RSA", - "@sendingRSAPublicKey": { + "@parsingResponseFailed": { "description": "Message for the rollout process" }, - "sendingRSAPublicKeyFailed": "Wysyłanie publicznego klucza RSA nieudane", - "@sendingRSAPublicKeyFailed": { - "description": "Message for the rollout process" + "@period": { + "description": "Title of the dropdown button where the period of the totp token is selected." }, - "parsingResponse": "Analizowanie odpowiedzi", - "@parsingResponse": { - "description": "Message for the rollout process" + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "parsingResponseFailed": "Analizowanie odpowiedzi nieudane", - "@parsingResponseFailed": { - "description": "Message for the rollout process" + "@pleaseEnterANameForThisToken": { + "description": "Hint telling the user to enter a name for a token." }, - "rolloutCompleted": "Wdrożenie zakończone", - "@rolloutCompleted": { - "description": "Message for the rollout process" + "@pleaseEnterASecretForThisToken": { + "description": "Hint telling the user to enter a secret for a token." }, - "errorRollOutNoConnectionToServer": "Brak połączenia z serwerem", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process" + "@pollingChallenges": { + "type": "text" }, - "authToAcceptPushRequest": "Uwierzytelnij, aby zaakceptować żądanie push.", - "@authToAcceptPushRequest": { - "description": "Message for the rollout process" + "@pollingFailed": { + "description": "Tells the user that the polling failed." }, - "authToDeclinePushRequest": "Uwierzytelnij, aby odrzucić żądanie push.", - "pushRequestParseError": "Żądanie push nie mogło zostać przetworzone.", - "imageUrl": "Adres URL obrazu", - "errorRollOutSSLHandshakeFailed": "Uścisk dłoni SSL nie powiódł się. Rozwijanie nie jest możliwe.", - "errorWhenPullingChallenges": "Wystąpił błąd podczas odpytywania o wyzwania {name}", - "@errorWhenPullingChallenges": { + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", "placeholders": { - "name": { + "serial": { "example": "PUSH1234A" } } }, - "couldNotConnectToServer": "Nie można połączyć się z serwerem.", - "errorRollOutNotPossibleAnymore": "Wstać z łóżka tego tokena nie jest już możliwe.", - "errorTokenExpired": "Token {name} wygasł.", - "@errorTokenExpired": { - "placeholders": { - "name": { - "example": "PUSH1234A" - } - } + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." }, - "yes": "Tak", - "no": "Nie", - "butDiscardIt": "ale odrzucić go", - "declineIt": "odrzuć go", - "requestTriggerdByUserQuestion": "Czy ta prośba została wywołana przez Ciebie?", - "grantCameraPermissionDialogTitle": "Uprawnienie do kamery nie zostało przyznane", - "grantCameraPermissionDialogContent": "Przyznaj uprawnienia kamery do skanowania kodów QR.", - "grantCameraPermissionDialogPermanentlyDenied": "Uprawnienia do aparatu zostały trwale zablokowane. Przyznaj uprawnienia aparatu w ustawieniach telefonu.", - "grantCameraPermissionDialogButton": "Grant permission", - "decryptErrorTitle": "Decryption error", - "decryptErrorContent": "Niestety, aplikacja nie była w stanie odszyfrować tokenów. Oznacza to, że klucz szyfrowania jest uszkodzony. Możesz spróbować ponownie lub usunąć dane aplikacji, co spowoduje usunięcie tokenów w aplikacji.", - "decryptErrorButtonDelete": "Usuń", - "decryptErrorButtonSendError": "Wyślij błąd", - "decryptErrorButtonRetry": "Ponów próbę", - "decryptErrorDeleteConfirmationContent": "Czy na pewno chcesz usunąć dane aplikacji?", - "hidePushTokens": "Ukryj tokeny push", - "hidePushTokensDescription": "Ukryj tokeny push z listy tokenów. Nie spowoduje to usunięcia tokenów i będą one nadal widoczne na osobnym ekranie", - "settingsGroupGeneral": "Informacje ogólne", - "licensesAndVersion": "Licencje i wersja", - "privacyPolicy": "Polityka prywatności", - "introScanQrCode": "Możesz skanować kody QR, aby dodawać tokeny. Obsługujemy każdy popularny token uwierzytelniania dwuskładnikowego, a także tokeny privacyIDEA.", - "introAddTokenManually": "Jeśli nie chcesz skanować kodu QR, możesz również dodać tokeny ręcznie.", - "introTokenSwipe": "Przesuń tokeny w lewo, aby zobaczyć dostępne akcje.", - "introEditToken": "Tutaj możesz edytować nazwę tokena i zobaczyć kilka szczegółów.", - "introLockToken": "Aby jeszcze bardziej zwiększyć bezpieczeństwo, możesz zablokować tokeny. Wtedy token może być używany tylko po uwierzytelnieniu.", - "introDragToken": "Reorganizuj swoje tokeny, naciskając je przez kilka sekund, a następnie przeciągając je do żądanej pozycji.", - "introAddFolder": "Możesz tworzyć foldery, aby organizować swoje tokeny.", - "introPollForChallenges": "Możesz sprawdzić nowe wyzwania, przeciągając listę tokenów w dół.", - "introHidePushTokens": "Twoje tokeny push są teraz ukryte, ale nadal możesz je zobaczyć na ekranie tokenów push.", - "legacySigningErrorTitle": "Wystąpił błąd podczas korzystania z przestarzałego tokena: {tokenLabel}", - "@legacySigningErrorTitle": { - "description": "Title of the error dialog that is shown when an error occurs while using a legacy token.", - "placeholders": { - "tokenLabel": { - "example": "PUSH1234A" - } - } + "@rename": { + "description": "Label that describes renaming the token." }, - "legacySigningErrorMessage": "Token został utworzony w nieaktualnej wersji aplikacji, co może prowadzić do problemów podczas korzystania z niego.\nZaleca się utworzenie nowego tokena push, jeśli problem nadal występuje!", - "@legacySigningErrorMessage": { - "description": "Message of the error dialog that is shown when an error occurs while using a legacy token." + "@renameToken": { + "description": "Title of the dialog where a new name for a token can be entered." }, - "selectImportSource": "Wybierz źródło importu", - "selectImportType": "Jak chcesz zaimportować tokeny?", - "importTokens": "Token importu", - "importNTokens": "{count, plural, zero{Nie importuj tokenów} one{Importuj jeden token} other{Import {count} tokenów}}", - "selectFile": "Wybierz plik", - "decrypt": "Odszyfruj", - "tokensAreEncrypted": "Tokeny są zaszyfrowane. Wprowadź hasło, aby je odszyfrować", - "tokensNotEncrypted": "Tokeny nie są zaszyfrowane i mogą być importowane bezpośrednio.", - "tokensSuccessfullyDecrypted": "Tokeny zostały pomyślnie odszyfrowane i można je teraz zaimportować.", - "password": "Hasło", - "wrongPassword": "Nieprawidłowe hasło", - "qrScan": "Scan", - "enterLink": "Wprowadź link", - "invalidBackupFile": "Wybrany plik nie jest prawidłową kopią zapasową {appName}.", - "invalidQrScan": "Zeskanowany kod QR nie jest prawidłową kopią zapasową {appName}.", - "invalidQrFile": "Wybrany plik nie zawiera prawidłowego kodu QR z {appName}.", - "invalidLink": "Wprowadzony link nie jest prawidłowym tokenem {appName} lub nie jest obsługiwany.", - "importFailedToken": "{count, plural, zero{Nie udało się zaimportować tokenu.} one{Nie udało się zaimportować tokena.} other{Nie udało się zaimportować {count} tokenów.}}", - "importExistingToken": "{count, plural, zero{Nie znaleziono tokena, który już znajduje się w aplikacji.} one{Znaleziono token, który już istnieje w aplikacji.} other{Znaleziono {count} tokenów, które już znajdują się w aplikacji.}}", - "importConflictToken": "{count, plural, zero{Nie ma konfliktu z tokenami, które już istnieją.} one{Istnieje konflikt z tokenami, które już istnieją.} other{Istnieje konflikt z tokenami, które już istnieją.}}", - "importNewToken": "{count, plural, zero{Nie znaleziono nowego tokena.} one{Znaleziono nowy token, który można zaimportować.} other{Znaleziono {count} nowych tokenów, które można zaimportować.}}", - "importHintPrivacyIdeaQrScan": "Aby utworzyć kody QR tokenów, przejdź do ustawień i wybierz opcję \"Eksportuj\". Następnie wybierz opcję \"Jako kod QR\" i dotknij tokenu, który ma zostać wyeksportowany. Ten wariant jest odpowiedni tylko do bezpośredniego przesyłania na inne urządzenie, ponieważ kod QR nie jest szyfrowany.", - "importHintPrivacyIdeaFile": "Aby utworzyć kopię zapasową, przejdź do ustawień i wybierz \"Eksportuj\". Wybierz \"Jako plik\", wybierz tokeny, które chcesz wyeksportować. Następnie wybierz \"Eksportuj\" i ustaw hasło. Miejscem przechowywania jest folder pobierania na urządzeniu.", - "importHint2FAS": "Wybierz kopię zapasową 2FAS. Jeśli nie masz kopii zapasowej, utwórz ją w aplikacji 2FAS. Zalecamy użycie hasła.", - "importHintAegisBackupFile": "Wybierz swój eksport Aegis (.JSON).\nJeśli nie masz eksportu, utwórz go za pomocą menu ustawień w aplikacji Aegis. Zalecane jest użycie hasła.", - "importHintAegisQrScan": "Zeskanuj kod QR otrzymany podczas przesyłania wpisów z Aegis", - "importHintAegisLink": "Wprowadź link otrzymany podczas przesyłania wpisów z Aegis.", - "importHintGoogleQrScan": "Zeskanuj kod QR otrzymany podczas eksportowania kont z Google Authenticator", - "importHintGoogleQrFile": "Wybierz plik obrazu z kodem QR otrzymanym podczas eksportowania kont z Google Authenticator.\n!! Należy pamiętać, że zapisywanie kodu QR na urządzeniu nie jest bezpieczne, ponieważ tokeny nie są szyfrowane !!", - "importHintAuthenticatorProFile": "Aby utworzyć kopię zapasową aplikacji Authenticator Pro, przejdź do ustawień i dotknij \"Automatyczna kopia zapasowa\". Wybierz lokalizację przechowywania i ustaw hasło. Następnie naciśnij \"Utwórz teraz kopię zapasową\", aby wyeksportować tokeny.", - "importHintFreeOtpPlusQrScan": "Zeskanuj kod QR otrzymany po naciśnięciu trzech kropek na kafelku tokena i wybierz \"Udostępnij kod QR\".", - "importHintFreeOtpPlusFile": "Aby utworzyć kopię zapasową aplikacji FreeOTP+, dotknij trzech kropek w prawym górnym rogu i wybierz \"Eksportuj\". Można wybrać format JSON lub URI. Zalecamy usunięcie kopii zapasowej po jej zaimportowaniu, ponieważ nie jest ona szyfrowana.", - "qrFileDecodeError": "Nie można było zdekodować kodu QR z wybranego obrazu, zamiast tego użyj skanera kodów QR.", - "tokenLink": "TokenLink", - "feedback": "Informacje zwrotne", - "feedbackTitle": "Twoja opinia jest zawsze mile widziana!", - "feedbackDescription": "Jeśli masz jakieś pytania, sugestie lub problemy, daj nam znać.", - "feedbackHint": "Otworzy się gotowa wiadomość e-mail, którą możesz do nas wysłać. W razie potrzeby dodane zostaną informacje o urządzeniu i wersji aplikacji. Możesz sprawdzić i edytować wiadomość e-mail przed jej wysłaniem.", - "feedbackPrivacyPolicy1": "Wysyłając opinię, zgadzasz się z naszą ", - "feedbackPrivacyPolicy2": "polityką prywatności", - "@feedbackPrivacyPolicy2": { - "description": "Tapnięcie na to powinno otworzyć politykę prywatności." + "@renameTokenFolder": { + "description": "Title of the dialog where a new name for a token folder can be entered." }, - "feedbackPrivacyPolicy3": ".", - "addSystemInfo": "Dodaj informacje systemowe", - "feedbackSentTitle": "Opinia została wysłana", - "feedbackSentDescription": "Dziękujemy bardzo za pomoc w ulepszeniu tej aplikacji!", - "patchNotesDialogTitle": "Co nowego?", - "version": "Wersja", - "noMailAppTitle": "Nie znaleziono aplikacji pocztowej", - "noMailAppDescription": "Na tym urządzeniu nie zainstalowano ani nie zainicjowano aplikacji poczty e-mail, spróbuj ponownie, gdy będziesz w stanie wysłać wiadomość e-mail", - "authenticationRequest": "Żądanie uwierzytelnienia", - "requestInfo": "Wysłane przez {issuer} dla twojego konta: \"{account}\"", "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { - "issuer": { - "example": "privacyIDEA" - }, "account": { "example": "GitHub" + }, + "issuer": { + "example": "privacyIDEA" } } }, - "errorUnlinkingPushToken": "Nie udało się odłączyć tokenu push {label}.", - "@errorUnlinkingPushToken": { - "description": "Error message when unlinking a push token failed.", + "@requestPushChallengesPeriodically": { + "description": "The description of the polling feature." + }, + "@retry": { + "description": "Label for e.g. a button. Something is tried to be done again." + }, + "@rolloutCompleted": { + "description": "Message for the rollout process" + }, + "@scanQrCode": { + "description": "The button to scan otpauth qr-codes." + }, + "@secretIsRequired": { + "description": "Error message when the secret is missing." + }, + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "@send": { + "description": "Button to send the error log." + }, + "@sendErrorDialogBody": { + "description": "Description shown to the user about what info the error report contains." + }, + "@sendErrorLogDescription": { + "description": "Explanation for the user what he will send." + }, + "@sendPushRequestResponseFailed": { + "description": "Error message when the response to a push request could not be sent." + }, + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "@serverNotReachable": { + "description": "Tells the user that the server could not be reached." + }, + "@settings": { + "description": "Button to open the settings page." + }, + "@showDetails": { + "description": "Button to show details." + }, + "@showErrorLog": { + "description": "Button to show the error log." + }, + "@showPrivacyPolicy": { + "description": "Button to show the privacy policy." + }, + "@signInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "@someTokensDoNotSupportPolling": { + "description": "Tells the user, that the following tokens do not support polling.", + "type": "text" + }, + "@startRollout": { + "description": "Label that tells the user that the token is being rolled out." + }, + "@statusCode": { + "description": "Tells the user the status code of the error.", "placeholders": { - "label": { - "example": "PUSH1234A" + "statusCode": { + "example": "400" } } }, - "pleaseSyncManuallyWhenNetworkIsAvailable": "Zsynchronizuj tokeny push ręcznie za pomocą ustawień, gdy dostępne jest połączenie sieciowe", - "pushTokens": "Tokeny push", - "continueButton": "Kontynuuj", - "addTokenManually": "Dodaj token ręcznie", - "addFolder": "Dodaj folder", - "searchTokens": "Wyszukiwanie tokenów", - "closeSearchTokens": "Zamknij wyszukiwanie", - "increaseCounter": "Zwiększ licznik", - "copyOTPToClipboard": "Kopiowanie OTP do schowka", - "licenses": "Licencja", - "optionalMessage": "Opcjonalna wiadomość", - "confirmation": "potwierdzenie", - "askLogSendedDescription": "Czy wysłałeś dziennik i czy chcesz go teraz wyczyścić?", - "algorithmUnsupported": "Algorytm {algorithm} nie jest obsługiwany", - "@algorithmUnsupported": { + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "@syncContainerFailed": { + "description": "Error message when synchronizing a container failed." + }, + "@syncFbTokenFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "@systemTheme": { + "description": "The systems theme." + }, + "@theSecretDoesNotFitTheCurrentEncoding": { + "description": "Hint telling the user that the secret does not fit the selected encoding." + }, + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "@themeMode": { + "description": "Title of the setting group where the theme mode can be changed." + }, + "@timeOut": { + "description": "Error message when a request times out." + }, + "@tokenDataParseError": { + "description": "Error message when the token data could not be parsed." + }, + "@tokenDetails": { + "description": "Title of the token details menu." + }, + "@tokenSerial": { + "description": "Label for the token serial number." + }, + "@tokensDoNotSupportSynchronization": { + "description": "Informs the user that the following tokens cannot be synchronized as they do not support that." + }, + "@type": { + "description": "Title of the dropdown button where the type of the token is selected." + }, + "@unexpectedError": { + "description": "Title of page report mode." + }, + "@unknown": { + "description": "Tells that something is unknown." + }, + "@unlock": { + "description": "Description of button that unlocks a token." + }, + "@unsupported": { "placeholders": { - "algorithm": { - "example": "MD5" + "name": { + "example": "piauth version" + }, + "value": { + "example": "5" } } }, - "thisAppIsOpenSource": "Ta aplikacja jest open source\nOdwiedź nas na GitHub", - "invalidArgument": "{argument} nie jest prawidłową wartością dla {type}", - "importExportTokens": "Importuj/Eksportuj tokeny", - "exportNonPrivacyIDEATokens": "Eksportuj tokeny niebędące privacyIDEA", - "selectTokensToExport": "{count, plural, zero{} one{Wybierz token do wyeksportowania} other{Wybierz tokeny do wyeksportowania}}", - "noTokenToExport": "Brak tokena dostępnego do eksportu", - "exportAllTokens": "Eksportuj wszystkie tokeny", - "export": "Eksportuj", - "exportingTokens": "Eksportowanie tokenów...", - "exportTokens": "Eksportuj tokeny", - "enterPasswordToEncrypt": "Wprowadź hasło, aby zaszyfrować tokeny. To hasło będzie wymagane do importu tokenów.", - "exportLockedTokenReason": "Proszę uwierzytelnić się, aby wyeksportować zablokowane tokeny.", - "fileSavedToDownloadsFolder": "Plik zapisano w folderze Pobrane", - "errorSavingFile": "Błąd podczas zapisywania pliku", - "asQrCode": "Jako kod QR", - "asFile": "Jako plik", - "scanThisQrWithNewDevice": "Zeskanuj ten kod QR za pomocą nowego urządzenia, aby zaimportować token.", - "oneMore": "Jeszcze jeden", - "done": "Gotowe", - "confirmPassword": "Potwierdź hasło", - "exampleUrl": "Wprowadź prawidłowy adres URL, np: \"https://example.com/\"", - "pushEndpointUrl": "Adres URL punktu końcowego push", - "mustNotBeEmpty": "{field} nie może być puste", - "@mustNotBeEmpty": { + "@useDeviceLocaleDescription": { + "description": "Description of the switch tile where using the devices language can be enabled." + }, + "@useDeviceLocaleTitle": { + "description": "Title of the switch tile where using the devices language can be enabled." + }, + "@valueNotAllowed": { "placeholders": { - "field": { - "example": "Name" + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" } } }, - "sendPushRequestResponseFailed": "Nie udało się wysłać odpowiedzi.", - "@sendPushRequestResponseFailed": { - "description": "Error message when the response to a push request could not be sent." - }, - "passwordCannotBeEmpty": "Hasło nie może być puste", - "passwordMustBeAtLeast8Characters": "Hasło musi mieć co najmniej 8 znaków", + "@valueNotAllowedIn": { + "placeholders": { + "map": { + "example": "query parameters" + }, + "parameter": { + "example": "counter" + }, + "type": { + "example": "int" + }, + "value": { + "example": "-1" + } + } + }, + "@verboseLogging": { + "description": "Title of the switch tile where verbose logging can be enabled." + }, + "accept": "Potwierdzam", + "addANewFolder": "Utwórz nowy folder", + "addFolder": "Dodaj folder", + "addSystemInfo": "Dodaj informacje systemowe", + "addToken": "Dodaj token", + "addTokenManually": "Dodaj token ręcznie", + "algorithm": "Algorytm", + "algorithmUnsupported": "Algorytm {algorithm} nie jest obsługiwany", + "allTokensSynchronized": "Wszystkie tokeny są zsynchronizowane.", + "asFile": "Jako plik", + "asQrCode": "Jako kod QR", + "askLogSendedDescription": "Czy wysłałeś dziennik i czy chcesz go teraz wyczyścić?", + "authNotSupportedBody": "To działanie wymaga skonfigurowania ustawień zabezpieczeń albo uwierzytelniania biometrycznego.", + "authNotSupportedTitle": "Skonfigurowane ustawienia zabezpieczeń albo uwierzytelnianie biometryczne jest wymagane.", + "authToAcceptPushRequest": "Uwierzytelnij, aby zaakceptować żądanie push.", + "authToDeclinePushRequest": "Uwierzytelnij, aby odrzucić żądanie push.", + "authenticateToShowOtp": "Zweryfikuj tożsamość, by pokazać hasło jednorazowe.", + "authenticateToUnLockToken": "Zweryfikuj tożsamość, aby odblokować / zablokować token.", + "authenticationRequest": "Żądanie uwierzytelnienia", + "biometricHint": "Wymagana autentykacja", + "biometricNotRecognized": "Nie rozpoznano. Spróbuj ponownie.", + "biometricRequiredTitle": "Uwierzytelnianie biometryczne nie jest skonfigurowane.", + "biometricSuccess": "Autentykacja zakończona sukcesem!", + "butDiscardIt": "ale odrzucić go", + "cancel": "Anuluj", + "checkServerCertificate": "Sprawdź certyfikat serwera", + "checkYourNetwork": "Sprawdź połączenie sieciowe i spróbuj ponownie.", + "clearErrorLog": "Usuń", + "closeSearchTokens": "Zamknij wyszukiwanie", + "confirmDeletion": "Potwierdź usunięcie", + "confirmDeletionOf": "Jesteś pewien, że chcesz usunąć token: {name}?", + "confirmFolderDeletionHint": "Usunięcie folderu nie ma wpływu na znajdujące się w nim tokeny. Tokeny są przenoszone do głównej listy.", + "confirmPassword": "Potwierdź hasło", + "confirmTokenDeletionHint": "Usunięcie tego tokenu może uniemożliwić zalogowanie się. Upewnij się, że możesz zalogować się na powiązane konto bez tego tokenu.", + "confirmation": "potwierdzenie", + "connectionFailed": "Połączenie nie powiodło się.", + "container": "Pojemnik", + "continueButton": "Kontynuuj", + "copyOTPToClipboard": "Kopiowanie OTP do schowka", + "couldNotConnectToServer": "Nie można połączyć się z serwerem.", + "couldNotSignMessage": "Nie można podpisać wiadomości.", + "counter": "Licznik", + "create": "Utwórz", + "createdAt": "Utworzono dnia", + "creator": "Twórca", + "decline": "Odrzucam", + "declineIt": "odrzuć go", + "decrypt": "Odszyfruj", + "decryptErrorButtonDelete": "Usuń", + "decryptErrorButtonRetry": "Ponów próbę", + "decryptErrorButtonSendError": "Wyślij błąd", + "decryptErrorContent": "Niestety, aplikacja nie była w stanie odszyfrować tokenów. Oznacza to, że klucz szyfrowania jest uszkodzony. Możesz spróbować ponownie lub usunąć dane aplikacji, co spowoduje usunięcie tokenów w aplikacji.", + "decryptErrorDeleteConfirmationContent": "Czy na pewno chcesz usunąć dane aplikacji?", + "decryptErrorTitle": "Decryption error", + "delete": "Usuń", + "deleteLockedToken": "Uwierzytelnij, aby usunąć zablokowany token.", + "deviceCredentialsRequiredTitle": "Ustawienia zabezpieczeń urządzenia nie zostały skonfigurowane.", + "deviceCredentialsSetupDescription": "Skonfiguruj ustawienia zabezpieczeń w ustawieniach urządzenia.", + "digits": "Ilość cyfr", + "dismiss": "Odrzuć", + "done": "Gotowe", + "edit": "Edytuj", + "editLockedToken": "Aby edytować zablokowany token, należy się uwierzytelnić.", + "editToken": "Edytuj token", + "enablePolling": "Włącz autentykację przez wiadomość push.", + "encoding": "Kodowanie", + "enterDetailsForToken": "Wprowadź szczegóły dla tokenu", + "enterLink": "Wprowadź link", + "enterPasswordToEncrypt": "Wprowadź hasło, aby zaszyfrować tokeny. To hasło będzie wymagane do importu tokenów.", + "errorLogCleared": "Dziennik błędów wyczyszczony.", + "errorLogEmpty": "Dziennik błędów jest pusty", + "errorLogTitle": "Dziennik błędów", + "errorMailBody": "Plik dziennika błędów jest dołączony.\nTekst ten można zastąpić dodatkowymi informacjami o błędzie.", + "errorRollOutFailed": "Wdrażanie tokenu {name} nieudane.", + "errorRollOutNoConnectionToServer": "Brak połączenia z serwerem", + "errorRollOutNotPossibleAnymore": "Wstać z łóżka tego tokena nie jest już możliwe.", + "errorRollOutSSLHandshakeFailed": "Uścisk dłoni SSL nie powiódł się. Rozwijanie nie jest możliwe.", + "errorRollOutUnknownError": "Napotkano nieznany błąd. Wdrożenie tokenu niemożliwe: {e}", + "errorSavingFile": "Błąd podczas zapisywania pliku", + "errorSynchronizationNoNetworkConnection": "Synchronizacja tokenów push nieudana, ponieważ serwer privacyIDEA jest nieosiągalny.", + "errorTokenExpired": "Token {name} wygasł.", + "errorUnlinkingPushToken": "Nie udało się odłączyć tokenu push {label}.", + "errorWhenPullingChallenges": "Wystąpił błąd podczas odpytywania o wyzwania {name}", + "exampleUrl": "Wprowadź prawidłowy adres URL, np: \"https://example.com/\"", + "expandLockedFolder": "Uwierzytelnij, aby otworzyć zablokowany folder.", + "export": "Eksportuj", + "exportAllTokens": "Eksportuj wszystkie tokeny", + "exportLockedTokenReason": "Proszę uwierzytelnić się, aby wyeksportować zablokowane tokeny.", + "exportNonPrivacyIDEATokens": "Eksportuj tokeny niebędące privacyIDEA", + "exportTokens": "Eksportuj tokeny", + "exportingTokens": "Eksportowanie tokenów...", + "failedToLoad": "Nie udało się załadować:", + "feedback": "Informacje zwrotne", + "feedbackDescription": "Jeśli masz jakieś pytania, sugestie lub problemy, daj nam znać.", + "feedbackHint": "Otworzy się gotowa wiadomość e-mail, którą możesz do nas wysłać. W razie potrzeby dodane zostaną informacje o urządzeniu i wersji aplikacji. Możesz sprawdzić i edytować wiadomość e-mail przed jej wysłaniem.", + "feedbackPrivacyPolicy1": "Wysyłając opinię, zgadzasz się z naszą ", + "feedbackPrivacyPolicy2": "polityką prywatności", + "feedbackPrivacyPolicy3": ".", + "feedbackSentDescription": "Dziękujemy bardzo za pomoc w ulepszeniu tej aplikacji!", + "feedbackSentTitle": "Opinia została wysłana", + "feedbackTitle": "Twoja opinia jest zawsze mile widziana!", + "fileSavedToDownloadsFolder": "Plik zapisano w folderze Pobrane", + "findingQrCodeInImage": "Szukanie kodu QR na obrazku...", + "firebaseToken": "Token Firebase", + "folderName": "Nazwa folderu", + "generatingPhonePart": "Generowanie sekretu po stronie telefonu...", + "generatingRSAKeyPair": "Generowanie pary kluczy RSA", + "generatingRSAKeyPairFailed": "Generowanie pary kluczy RSA nieudane", + "goToSettingsButton": "Idź do ustawień", + "goToSettingsDescription": "Ustawienia zabezpieczeń, bądź uwierzytelnianie biometryczne nie są skonfigurowane w twoim urządzeniu. Skonfiguruj je w ustawieniach urządzenia.", + "grantCameraPermissionDialogButton": "Grant permission", + "grantCameraPermissionDialogContent": "Przyznaj uprawnienia kamery do skanowania kodów QR.", + "grantCameraPermissionDialogPermanentlyDenied": "Uprawnienia do aparatu zostały trwale zablokowane. Przyznaj uprawnienia aparatu w ustawieniach telefonu.", + "grantCameraPermissionDialogTitle": "Uprawnienie do kamery nie zostało przyznane", + "handshakeFailed": "Handshake nie powiódł się", + "hidePushTokens": "Ukryj tokeny push", + "hidePushTokensDescription": "Ukryj tokeny push z listy tokenów. Nie spowoduje to usunięcia tokenów i będą one nadal widoczne na osobnym ekranie", + "imageUrl": "Adres URL obrazu", + "importConflictToken": "{count, plural, zero{Nie ma konfliktu z tokenami, które już istnieją.} one{Istnieje konflikt z tokenami, które już istnieją.} other{Istnieje konflikt z tokenami, które już istnieją.}}", + "importExistingToken": "{count, plural, zero{Nie znaleziono tokena, który już znajduje się w aplikacji.} one{Znaleziono token, który już istnieje w aplikacji.} other{Znaleziono {count} tokenów, które już znajdują się w aplikacji.}}", + "importExportTokens": "Importuj/Eksportuj tokeny", + "importFailedToken": "{count, plural, zero{Nie udało się zaimportować tokenu.} one{Nie udało się zaimportować tokena.} other{Nie udało się zaimportować {count} tokenów.}}", + "importHint2FAS": "Wybierz kopię zapasową 2FAS. Jeśli nie masz kopii zapasowej, utwórz ją w aplikacji 2FAS. Zalecamy użycie hasła.", + "importHintAegisBackupFile": "Wybierz swój eksport Aegis (.JSON).\nJeśli nie masz eksportu, utwórz go za pomocą menu ustawień w aplikacji Aegis. Zalecane jest użycie hasła.", + "importHintAegisLink": "Wprowadź link otrzymany podczas przesyłania wpisów z Aegis.", + "importHintAegisQrScan": "Zeskanuj kod QR otrzymany podczas przesyłania wpisów z Aegis", + "importHintAuthenticatorProFile": "Aby utworzyć kopię zapasową aplikacji Authenticator Pro, przejdź do ustawień i dotknij \"Automatyczna kopia zapasowa\". Wybierz lokalizację przechowywania i ustaw hasło. Następnie naciśnij \"Utwórz teraz kopię zapasową\", aby wyeksportować tokeny.", + "importHintFreeOtpPlusFile": "Aby utworzyć kopię zapasową aplikacji FreeOTP+, dotknij trzech kropek w prawym górnym rogu i wybierz \"Eksportuj\". Można wybrać format JSON lub URI. Zalecamy usunięcie kopii zapasowej po jej zaimportowaniu, ponieważ nie jest ona szyfrowana.", + "importHintFreeOtpPlusQrScan": "Zeskanuj kod QR otrzymany po naciśnięciu trzech kropek na kafelku tokena i wybierz \"Udostępnij kod QR\".", + "importHintGoogleQrFile": "Wybierz plik obrazu z kodem QR otrzymanym podczas eksportowania kont z Google Authenticator.\n!! Należy pamiętać, że zapisywanie kodu QR na urządzeniu nie jest bezpieczne, ponieważ tokeny nie są szyfrowane !!", + "importHintGoogleQrScan": "Zeskanuj kod QR otrzymany podczas eksportowania kont z Google Authenticator", + "importHintPrivacyIdeaFile": "Aby utworzyć kopię zapasową, przejdź do ustawień i wybierz \"Eksportuj\". Wybierz \"Jako plik\", wybierz tokeny, które chcesz wyeksportować. Następnie wybierz \"Eksportuj\" i ustaw hasło. Miejscem przechowywania jest folder pobierania na urządzeniu.", + "importHintPrivacyIdeaQrScan": "Aby utworzyć kody QR tokenów, przejdź do ustawień i wybierz opcję \"Eksportuj\". Następnie wybierz opcję \"Jako kod QR\" i dotknij tokenu, który ma zostać wyeksportowany. Ten wariant jest odpowiedni tylko do bezpośredniego przesyłania na inne urządzenie, ponieważ kod QR nie jest szyfrowany.", + "importNTokens": "{count, plural, zero{Nie importuj tokenów} one{Importuj jeden token} other{Import {count} tokenów}}", + "importNewToken": "{count, plural, zero{Nie znaleziono nowego tokena.} one{Znaleziono nowy token, który można zaimportować.} other{Znaleziono {count} nowych tokenów, które można zaimportować.}}", + "importTokens": "Token importu", + "importedVia": "Importowane przez", + "increaseCounter": "Zwiększ licznik", + "internalServerError": "Wewnętrzny błąd serwera ({code})", + "introAddFolder": "Możesz tworzyć foldery, aby organizować swoje tokeny.", + "introAddTokenManually": "Jeśli nie chcesz skanować kodu QR, możesz również dodać tokeny ręcznie.", + "introDragToken": "Reorganizuj swoje tokeny, naciskając je przez kilka sekund, a następnie przeciągając je do żądanej pozycji.", + "introEditToken": "Tutaj możesz edytować nazwę tokena i zobaczyć kilka szczegółów.", + "introHidePushTokens": "Twoje tokeny push są teraz ukryte, ale nadal możesz je zobaczyć na ekranie tokenów push.", + "introLockToken": "Aby jeszcze bardziej zwiększyć bezpieczeństwo, możesz zablokować tokeny. Wtedy token może być używany tylko po uwierzytelnieniu.", + "introPollForChallenges": "Możesz sprawdzić nowe wyzwania, przeciągając listę tokenów w dół.", + "introScanQrCode": "Możesz skanować kody QR, aby dodawać tokeny. Obsługujemy każdy popularny token uwierzytelniania dwuskładnikowego, a także tokeny privacyIDEA.", + "introTokenSwipe": "Przesuń tokeny w lewo, aby zobaczyć dostępne akcje.", + "invalidBackupFile": "Wybrany plik nie jest prawidłową kopią zapasową {appName}.", + "invalidLink": "Wprowadzony link nie jest prawidłowym tokenem {appName} lub nie jest obsługiwany.", + "invalidQrFile": "Wybrany plik nie zawiera prawidłowego kodu QR z {appName}.", + "invalidQrScan": "Zeskanowany kod QR nie jest prawidłową kopią zapasową {appName}.", + "invalidValue": "untranslated", + "invalidValueIn": "untranslated", + "isExpotableQuestion": "Czy można eksportować?", + "isPiTokenQuestion": "To jest token privacyIDEA?", + "language": "Język", + "legacySigningErrorMessage": "Token został utworzony w nieaktualnej wersji aplikacji, co może prowadzić do problemów podczas korzystania z niego.\nZaleca się utworzenie nowego tokena push, jeśli problem nadal występuje!", + "legacySigningErrorTitle": "Wystąpił błąd podczas korzystania z przestarzałego tokena: {tokenLabel}", + "licenses": "Licencja", + "licensesAndVersion": "Licencje i wersja", + "linkedContainer": "Połączony pojemnik", + "lock": "Zablokuj", + "lockOut": "Uwierzytelnianie biometryczne jest wyłączone. Zablokuj i odblokuj ponownie ekran, żeby je włączyć.", + "logMenu": "Menu dziennika", + "malformedData": "Nieprawidłowe dane", + "markQrCode": "Zaznacz kod QR", + "missingRequiredParameter": "Wartość parametru [{parameter}] jest wymagana, ale jej brakuje.", + "missingRequiredParameterIn": "Wartość parametru [{parameter}] jest wymagana, ale brakuje jej w \"{map}\".", + "mustNotBeEmpty": "{field} nie może być puste", + "name": "Nazwa", + "no": "Nie", + "noFbToken": "Brak dostępnego tokena Firebase", + "noMailAppDescription": "Na tym urządzeniu nie zainstalowano ani nie zainicjowano aplikacji poczty e-mail, spróbuj ponownie, gdy będziesz w stanie wysłać wiadomość e-mail", + "noMailAppTitle": "Nie znaleziono aplikacji pocztowej", + "noNetworkConnection": "Brak połączenia sieciowego.", + "noPublicKey": "Brak dostępnego klucza publicznego", + "noResultText1": "Dotknij ", + "noResultText2": " przycisku, żeby zacząć!", + "noResultTitle": "Nie zainstalowano jeszcze żadnego tokenu.", + "noTokenToExport": "Brak tokena dostępnego do eksportu", + "notAnInteger": "Wartość nie jest liczbą całkowitą.Wartość nie jest liczbą całkowitą.", + "notAnNumber": "Wartość nie jest liczbą.", + "ok": "Ok", + "oneMore": "Jeszcze jeden", + "open": "Otwórz", + "optionalMessage": "Opcjonalna wiadomość", + "originApp": "Aplikacja Origin", + "originDetails": "Szczegóły dotyczące pochodzenia", + "otpValueCopiedMessage": "Jednorazowe hasło \"{otpValue}\" skopiowane do schowka.", + "parsingResponse": "Analizowanie odpowiedzi", + "parsingResponseFailed": "Analizowanie odpowiedzi nieudane", + "password": "Hasło", + "passwordCannotBeEmpty": "Hasło nie może być puste", "passwordCannotContainWhitespace": "Hasło nie może zawierać spacji", + "passwordMustBeAtLeast8Characters": "Hasło musi mieć co najmniej 8 znaków", "passwordMustContainLowercaseLetter": "Hasło musi zawierać małą literę", - "passwordMustContainUppercaseLetter": "Hasło musi zawierać dużą literę", "passwordMustContainNumber": "Hasło musi zawierać cyfrę", "passwordMustContainSpecialCharacter": "Hasło musi zawierać znak specjalny", + "passwordMustContainUppercaseLetter": "Hasło musi zawierać dużą literę", "passwordsDoNotMatch": "Hasła nie pasują do siebie", - "selectTokensToExportHelpTitle": "Czy twój token nie znajduje się na liście?", - "selectTokensToExportHelpContent": "Jeśli token nie znajduje się na liście, nie ma gwarancji, że nie jest tokenem privacyIDEA.\nObecnie eksportować można tylko tokeny dodane ręcznie i zaimportowane.", - "findingQrCodeInImage": "Szukanie kodu QR na obrazku...", - "qrNotFound": "Nie znaleziono kodu QR!", + "patchNotesBugFixes": "Poprawki błędów", + "patchNotesDialogTitle": "Co nowego?", + "patchNotesImprovements": "Ulepszenia", + "patchNotesNewFeatures": "Nowe funkcje", + "patchNotesV4_3_0NewFeatures1": "Dodano obsługę importowania tokenów z Google, Aegis i 2FAS Authenticator. Więcej źródeł importu zostanie dodanych w przyszłości", + "patchNotesV4_3_0NewFeatures2": "Dodano opcję opinii do ustawień.", + "patchNotesV4_3_0NewFeatures3": "Tokeny push można teraz ukryć na liście tokenów", + "patchNotesV4_3_0NewFeatures4": "Dodano wprowadzenia, aby ułatwić nowym użytkownikom rozpoczęcie pracy.", + "patchNotesV4_3_0NewFeatures5": "Możesz teraz wyszukiwać tokeny, dotykając szkła powiększającego w prawym górnym rogu.", + "patchNotesV4_3_0NewFeatures6": "Dodano token HomeWidget dla systemu Android 12 i nowszych.", + "patchNotesV4_3_1BugFix1": "Został naprawiony problem, w którym wartość OTP nie była wyświetlana po uwierzytelnieniu na niektórych urządzeniach.", + "patchNotesV4_3_1Improvement1": "Został poprawiony skaner kodów QR.", + "patchNotesV4_4_0Improvement1": "Dodano kolejne źródła importu.", + "patchNotesV4_4_0Improvement2": "Ulepszono rozpoznawanie kodów QR z plików graficznych.", + "patchNotesV4_4_0NewFeatures1": "Możliwe jest teraz eksportowanie tokenów, w przypadku których można upewnić się, że nie są to tokeny privacyIDEA. Obecnie nie można wykluczyć, że tokeny dodane za pomocą skanera kodów QR pochodzą z privacyIDEA. Rozróżnienie to zostanie poprawione w przyszłych wersjach", + "patchNotesV4_4_0NewFeatures2": "Dodano obsługę funkcji privacyIDEA \"require presence\".", + "period": "Cykl", + "phonePart": "Sekret po stronie telefonu:", + "pleaseEnterANameForThisToken": "Wprowadź nazwę dla tokenu", + "pleaseEnterASecretForThisToken": "Wprowadź sekret dla tokenu", + "pleaseSyncManuallyWhenNetworkIsAvailable": "Zsynchronizuj tokeny push ręcznie za pomocą ustawień, gdy dostępne jest połączenie sieciowe", + "pollingChallenges": "Sprawdzanie nowych wyzwań", + "pollingFailed": "Zapytanie nie powiodło się.", + "pollingFailedFor": "Zapytanie dla {serial} nie powiodło się.", + "privacyPolicy": "Polityka prywatności", + "publicKey": "Klucz publiczny", + "pushEndpointUrl": "Adres URL punktu końcowego push", + "pushRequestParseError": "Żądanie push nie mogło zostać przetworzone.", + "pushToken": "Push token", + "pushTokens": "Tokeny push", + "qrFileDecodeError": "Nie można było zdekodować kodu QR z wybranego obrazu, zamiast tego użyj skanera kodów QR.", "qrInFileNotFound": "Nie znaleziono kodu QR na wybranym obrazie.", "qrInFileNotFound2": "Możesz pokazać mi, gdzie znajduje się kod QR.", "qrInFileNotFound3": "Oczekuję, że znajdę kod, jeśli znajduje się w środku zaznaczonego obszaru.", - "markQrCode": "Zaznacz kod QR", - "malformedData": "Nieprawidłowe dane" + "qrNotFound": "Nie znaleziono kodu QR!", + "qrScan": "Scan", + "rename": "Zmień nazwę", + "renameToken": "Zmień nazwę tokenu", + "renameTokenFolder": "Zmiana nazwy folderu", + "requestInfo": "Wysłane przez {issuer} dla twojego konta: \"{account}\"", + "requestPushChallengesPeriodically": "Wysyłaj zapytanie o push challenge cyklicznie. Włącz, jeśli push nie przychodzi normalnie.", + "requestTriggerdByUserQuestion": "Czy ta prośba została wywołana przez Ciebie?", + "retryRollout": "Ponowne uruchomienie", + "rolloutCompleted": "Wdrożenie zakończone", + "save": "Zapisz", + "scanQrCode": "Zeskanuj kod QR", + "scanThisQrWithNewDevice": "Zeskanuj ten kod QR za pomocą nowego urządzenia, aby zaimportować token.", + "searchTokens": "Wyszukiwanie tokenów", + "secretIsRequired": "Wymagany jest sekret", + "secretKey": "Tajny klucz", + "selectFile": "Wybierz plik", + "selectImportSource": "Wybierz źródło importu", + "selectImportType": "Jak chcesz zaimportować tokeny?", + "selectTokensToExport": "{count, plural, zero{} one{Wybierz token do wyeksportowania} other{Wybierz tokeny do wyeksportowania}}", + "selectTokensToExportHelpContent": "Jeśli token nie znajduje się na liście, nie ma gwarancji, że nie jest tokenem privacyIDEA.\nObecnie eksportować można tylko tokeny dodane ręcznie i zaimportowane.", + "selectTokensToExportHelpTitle": "Czy twój token nie znajduje się na liście?", + "send": "Wyślij", + "sendErrorDialogBody": "Napotkano nieoczekiwany błąd w aplikacji. Poniższa wiadomość może zostać wysłana do deweloperów poprzez email, żeby pomóc uniknąć tego problemu w przyszłości.", + "sendErrorLogDescription": "Tworzona jest gotowa wiadomość e-mail zawierająca informacje o aplikacji, błędzie i urządzeniu.\nMożesz edytować wiadomość e-mail przed jej wysłaniem.\nTutaj można zobaczyć, w jaki sposób wykorzystujemy te informacje:", + "sendPushRequestResponseFailed": "Nie udało się wysłać odpowiedzi.", + "sendingRSAPublicKey": "Wysyłanie publicznego klucza RSA", + "sendingRSAPublicKeyFailed": "Wysyłanie publicznego klucza RSA nieudane", + "serverNotReachable": "Nie można uzyskać połączenia z serwerem.", + "settings": "Ustawienia", + "settingsGroupGeneral": "Informacje ogólne", + "showDetails": "Pokaż szczegóły", + "showErrorLog": "Wyświetl", + "showPrivacyPolicy": "Pokaż politykę prywatności", + "signInTitle": "Wymagana autentykacja", + "someTokensDoNotSupportPolling": "Część tokenów jest przestarzała i nie wspiera aktywnego zapytania dla autentykacji przez wiadomość push.", + "startRollout": "Rozpocznij wdrożenie", + "statusCode": "Kod statusu: {statusCode}", + "sync": "Synchronizuj", + "syncContainerFailed": "Synchronizacja kontenera nie powiodła się", + "syncFbTokenFailed": "Synchronizacja dla poniższych tokenów się nie udała, spróbuj ponownie:", + "synchronizePushTokens": "Synchronizuj tokeny push.", + "synchronizesTokensWithServer": "Synchronizuje tokeny push z serwerem privacyIDEA.", + "synchronizingTokens": "Synchronizacja tokenów.", + "theSecretDoesNotFitTheCurrentEncoding": "Sekret nie odpowiada wybranemu sposobowi kodowania.", + "themeMode": "Motyw", + "thisAppIsOpenSource": "Ta aplikacja jest open source\nOdwiedź nas na GitHub", + "timeOut": "Limit czasu", + "tokenDataParseError": "Nie można przeanalizować danych tokenu", + "tokenDetails": "Szczegóły tokena", + "tokenLink": "TokenLink", + "tokenSerial": "Token serial", + "tokensAreEncrypted": "Tokeny są zaszyfrowane. Wprowadź hasło, aby je odszyfrować", + "tokensDoNotSupportSynchronization": "Następujące tokeny nie wspierają synchronizacji i muszą zostać wdrożone od nowa:", + "tokensNotEncrypted": "Tokeny nie są zaszyfrowane i mogą być importowane bezpośrednio.", + "tokensSuccessfullyDecrypted": "Tokeny zostały pomyślnie odszyfrowane i można je teraz zaimportować.", + "type": "Typ", + "unexpectedError": "Wystąpił nieoczekiwany błąd.", + "unknown": "Nieznany", + "unlock": "Odblokuj", + "unsupported": "Opcja {name} [{value}] nie jest obsługiwana przez tę wersję aplikacji.", + "useDeviceLocaleDescription": "Użyj języka urządzenia, jeśli jest wspierany. W innym wypadku zostanie ustawiony domyślny język angielski.", + "useDeviceLocaleTitle": "Użyj języka urządzenia.", + "validFor": "Ważny przez", + "validUntil": "Ważny do", + "valueNotAllowed": "untranslated", + "valueNotAllowedIn": "untranslated", + "verboseLogging": "Wyczerpujące rejestrowanie", + "version": "Wersja", + "wrongPassword": "Nieprawidłowe hasło", + "yes": "Tak" } \ No newline at end of file diff --git a/lib/mains/main_customizer.dart b/lib/mains/main_customizer.dart index a0a952932..6bae864ce 100644 --- a/lib/mains/main_customizer.dart +++ b/lib/mains/main_customizer.dart @@ -88,6 +88,7 @@ class CustomizationAuthenticator extends ConsumerWidget { ), MainView.routeName: (context) => MainView( appIcon: applicationCustomizer.appIcon.getWidget, + appImage: applicationCustomizer.appImage.getWidget, appName: applicationCustomizer.appName, disablePatchNotes: applicationCustomizer.disabledFeatures.contains(AppFeature.patchNotes), appConstraints: constraints, diff --git a/lib/mains/main_netknights.dart b/lib/mains/main_netknights.dart index 8d104e280..b949aee7b 100644 --- a/lib/mains/main_netknights.dart +++ b/lib/mains/main_netknights.dart @@ -110,6 +110,7 @@ class PrivacyIDEAAuthenticator extends ConsumerWidget { ), MainView.routeName: (context) => MainView( appIcon: _customization.appIcon.getWidget, + appImage: _customization.appImage.getWidget, appName: _customization.appName, disablePatchNotes: _customization.disabledFeatures.contains(AppFeature.patchNotes), appConstraints: constraints, diff --git a/lib/repo/token_container_state_repositorys/hybrid_token_container_state_repository.dart b/lib/repo/token_container_state_repositorys/hybrid_token_container_state_repository.dart deleted file mode 100644 index 8d2acb345..000000000 --- a/lib/repo/token_container_state_repositorys/hybrid_token_container_state_repository.dart +++ /dev/null @@ -1,190 +0,0 @@ -// /* -// * privacyIDEA Authenticator -// * -// * Author: Frank Merkel -// * -// * Copyright (c) 2024 NetKnights GmbH -// * -// * Licensed under the Apache License, Version 2.0 (the 'License'); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an 'AS IS' BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// import '../../interfaces/repo/container_repository.dart'; -// import '../../model/token_container.dart'; -// import '../../utils/errors.dart'; -// import '../../utils/logger.dart'; - -// class HybridTokenContainerRepository -// implements TokenContainerRepository { -// final LocalRepo _localRepository; -// final RemoteRepo _remoteRepository; - -// HybridTokenContainerRepository({ -// required LocalRepo localRepository, -// required RemoteRepo remoteRepository, -// }) : _localRepository = localRepository, -// _remoteRepository = remoteRepository; - -// @override -// Future loadContainerState({bool isInitial = false}) async { -// Logger.warning('Loading container state', name: 'HybridTokenContainerRepository'); -// TokenContainer localState; -// TokenContainer newState; - -// try { -// localState = await _localRepository.loadContainerState(); -// } catch (e) { -// Logger.warning('Failed to load local container state'); -// return TokenContainer.error( -// error: LocalizedException( -// unlocalizedMessage: 'Failed to load local container state', -// localizedMessage: (localization) => localization.failedToLoad('local container state'), -// ), -// ); -// } -// try { -// newState = await _remoteRepository.saveContainerState(localState); -// } catch (e) { -// newState = localState.copyTransformInto(); -// } - -// try { -// await _localRepository.saveContainerState(newState); -// } catch (e) { -// Logger.error('Failed to save synced state to local repository', name: 'HybridTokenContainerRepository', error: e); -// } - -// return newState; -// } - -// @override -// Future saveContainerState(TokenContainer currentState) async { -// if (currentState is TokenContainerError) { -// Logger.warning('Cannot save error state to repository'); -// return currentState; -// } -// TokenContainer newState; - -// try { -// newState = await _remoteRepository.saveContainerState(currentState); -// } catch (e, s) { -// Logger.warning( -// 'Failed to save state to remote repository: Changed to unsynced state', -// name: 'HybridTokenContainerRepository#saveContainerState', -// error: e, -// stackTrace: s, -// ); -// newState = currentState.copyTransformInto(); -// return _localRepository.saveContainerState(newState); -// } - -// try { -// newState = await _localRepository.saveContainerState(newState); -// } catch (e) { -// Logger.error('Failed to save state to local repository'); -// return newState; -// } -// return newState; -// } - -// // Future _merge({ -// // required TokenContainer localState, -// // required TokenContainer remoteState, -// // }) async { -// // List localTemplates; -// // List remoteTemplates; -// // if (localState is TokenContainerUninitialized) { -// // // Uninitialized state is always overwritten by other states -// // localTemplates = []; -// // } else { -// // localTemplates = localState.tokenTemplates; -// // } -// // if (remoteState is TokenContainerUninitialized) { -// // // Uninitialized state is always overwritten by other states -// // remoteTemplates = []; -// // } else { -// // remoteTemplates = remoteState.tokenTemplates ?? []; -// // } - -// // final mergedTemplates = await _mergeTemplateLists( -// // localTemplates: localTemplates, -// // remoteTemplates: remoteTemplates, -// // ); - -// // final newSyncedState = TokenContainerSynced( -// // lastSyncedAt: DateTime.now(), -// // containerId: localState.containerId, -// // description: localState.description, -// // type: '', // TODO: Implement type -// // tokenTemplates: mergedTemplates, -// // ); -// // return newSyncedState; -// // } - -// // Future> _mergeTemplateLists({ -// // required List localTemplates, -// // required List remoteTemplates, -// // }) async { -// // final mergedTemplates = []; - -// // // Add all remaining local templates -// // for (var localTemplate in localTemplates) { -// // final remoteTemplate = remoteTemplates.firstWhereOrNull((template) => template.id == localTemplate.id); -// // if (remoteTemplate == null) { -// // mergedTemplates.add(localTemplate); -// // continue; -// // } -// // mergedTemplates.add(await _mergeTemplates(localTemplate, remoteTemplate)); -// // } - -// // // Add all remaining remote templates -// // mergedTemplates.addAll(remoteTemplates); - -// // return mergedTemplates; -// // } - -// /// Merges local and remote token templates with the last synced state -// /// If both local and remote templates have changed, the remote changes are prioritized -// // Future _mergeTemplates(TokenTemplate local, TokenTemplate remote) async { -// // assert(local.id == remote.id, 'Both templates must have the same id'); -// // final mergedData = {}; - -// // print('------------------------------------------------------------------'); -// // print('Local: ${local.data}'); -// // mergedData.addAll(local.data); -// // print('MergedData: $mergedData'); -// // print('------------------------------------------------------------------'); -// // print('Remote: ${remote.data}'); -// // mergedData.addAll(remote.data); -// // print('MergedData: $mergedData'); -// // print('------------------------------------------------------------------'); - -// // return TokenTemplate(data: mergedData); -// // } - -// // @override -// // Future loadTokenTemplate(String tokenTemplateId) async { -// // final state = await loadContainerState(); -// // final template = state.tokenTemplates.firstWhereOrNull((template) => template.id == tokenTemplateId); -// // return template; -// // } - -// // @override -// // Future saveTokenTemplate(TokenTemplate tokenTemplate) async { -// // final state = await loadContainerState(); -// // final templates = state.tokenTemplates; -// // templates.removeWhere((template) => template.id == tokenTemplate.id); -// // templates.add(tokenTemplate); -// // final newState = state.copyWith(tokenTemplates: templates); -// // final savedState = await saveContainerState(newState); -// // return savedState.tokenTemplates.firstWhere((template) => template.id == tokenTemplate.id); -// // } -// } diff --git a/lib/repo/token_container_state_repositorys/remote_token_container_state_repository.dart b/lib/repo/token_container_state_repositorys/remote_token_container_state_repository.dart deleted file mode 100644 index adfa078c7..000000000 --- a/lib/repo/token_container_state_repositorys/remote_token_container_state_repository.dart +++ /dev/null @@ -1,50 +0,0 @@ -// /* -// * privacyIDEA Authenticator -// * -// * Author: Frank Merkel -// * -// * Copyright (c) 2024 NetKnights GmbH -// * -// * Licensed under the Apache License, Version 2.0 (the 'License'); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an 'AS IS' BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// import 'package:mutex/mutex.dart'; -// import '../../utils/logger.dart'; - -// import '../../api/token_container_api_endpoint.dart'; -// import '../../interfaces/repo/container_repository.dart'; -// import '../../model/token_container.dart'; - -// class RemoteTokenContainerRepository implements TokenContainerRepository { -// final TokenContainerApiEndpoint apiEndpoint; -// final Mutex _m = Mutex(); - -// Future _protect(Future Function() f) async => _m.protect(f); - -// RemoteTokenContainerRepository({required this.apiEndpoint}); - -// @override -// Future saveContainerState(TokenContainer containerState) async => await _saveContainerState(containerState); - -// Future _saveContainerState(TokenContainer containerState) async { -// Logger.info('Saving container state', name: 'RemoteTokenContainerRepository'); -// return await _protect(() async => (await apiEndpoint.sync(containerState)).copyTransformInto()); -// } - -// @override -// Future loadContainerState() { -// Logger.info('Loading container state', name: 'RemoteTokenContainerRepository'); -// return _fetchContainerState(); -// } - -// Future _fetchContainerState() async => await _protect(() async => await apiEndpoint.fetch()); -// } diff --git a/lib/repo/token_container_state_repositorys/secure_token_container_state_repository.dart.dart b/lib/repo/token_container_state_repositorys/secure_token_container_state_repository.dart.dart deleted file mode 100644 index 3ea0b7ccd..000000000 --- a/lib/repo/token_container_state_repositorys/secure_token_container_state_repository.dart.dart +++ /dev/null @@ -1,99 +0,0 @@ -// /* -// * privacyIDEA Authenticator -// * -// * Author: Frank Merkel -// * -// * Copyright (c) 2024 NetKnights GmbH -// * -// * Licensed under the Apache License, Version 2.0 (the 'License'); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an 'AS IS' BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// import 'dart:convert'; - -// import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -// import 'package:mutex/mutex.dart'; -// import '../../utils/logger.dart'; -// import '../../interfaces/repo/container_repository.dart'; -// import '../../model/token_container.dart'; - -// class SecureTokenContainerRepository implements TokenContainerRepository { -// static String prefix = 'token_container_state_'; -// String get _containerStateKey => '$prefix${containerId}_container_state'; -// final Mutex _m = Mutex(); -// Future _protect(Future Function() f) => _m.protect(f); -// final FlutterSecureStorage _storage = const FlutterSecureStorage(); - -// final String containerId; - -// SecureTokenContainerRepository({ -// required this.containerId, -// }); - -// Future _write(String key, String value) => _protect(() { -// Logger.debug('Writing key: $key, value: $value', name: 'secure_token_container_state_repository.dart.dart#_write'); -// return _storage.write(key: key, value: value); -// }); -// Future _read(String key) async { -// final value = await _protect(() async => await _storage.read(key: key)); -// Logger.debug('Reading key: $key, value: $value', name: 'secure_token_container_state_repository.dart.dart#_read'); -// return value; -// } - -// Future _delete(String key) => _protect(() => _storage.delete(key: key)); -// // Future> _readAll() async { -// // Map? keys; -// // await _protect(() async => keys = await _storage.readAll()); -// // keys!.removeWhere((key, value) => !key.startsWith(prefix + containerId)); -// // return keys!; -// // } - -// @override -// Future saveContainerState(TokenContainer containerState) async { -// Logger.info('Saving container state', name: 'secure_token_container_state_repository.dart.dart#saveContainerState'); -// if (TokenContainer is TokenContainerError) { -// Logger.error('Cannot save error state to repository', name: 'secure_token_container_state_repository.dart.dart#saveContainerState'); -// return containerState; -// } -// final json = containerState.toJson(); -// final jsonString = jsonEncode(json); -// await _write(_containerStateKey, jsonString); -// Logger.debug('Saved container state: $jsonString', name: 'secure_token_container_state_repository.dart.dart#saveContainerState'); -// return containerState; -// } - -// @override - -// /// Load the container state from the shared preferences -// Future loadContainerState() async { -// Logger.info('Loading container state', name: 'secure_token_container_state_repository.dart.dart#loadContainerState'); -// String? containerStateJsonString = await _read(_containerStateKey); -// Logger.debug('Loaded jsonString: $containerStateJsonString', name: 'secure_token_container_state_repository.dart.dart#loadContainerState'); -// if (containerStateJsonString == null) { -// return const TokenContainer.uninitialized(serial: '123'); -// } -// final json = jsonDecode(containerStateJsonString); -// try { -// final state = TokenContainer.fromJson(json); -// Logger.debug('Loaded container state: $containerStateJsonString', name: 'secure_token_container_state_repository.dart.dart#loadContainerState'); -// return state; -// } catch (e) { -// Logger.error( -// 'Failed to decode container state', -// name: 'secure_token_container_state_repository.dart.dart#loadContainerState', -// error: e, -// stackTrace: StackTrace.current, -// ); -// await _delete(_containerStateKey); -// return const TokenContainer.uninitialized(serial: '123'); -// } -// } -// } diff --git a/lib/utils/riverpod/riverpod_providers/generated_providers/token_container_notifier.dart b/lib/utils/riverpod/riverpod_providers/generated_providers/token_container_notifier.dart index c449697f0..02d4b796f 100644 --- a/lib/utils/riverpod/riverpod_providers/generated_providers/token_container_notifier.dart +++ b/lib/utils/riverpod/riverpod_providers/generated_providers/token_container_notifier.dart @@ -48,7 +48,7 @@ import '../../../logger.dart'; part 'token_container_notifier.g.dart'; -final containerCredentialsProvider = tokenContainerNotifierProviderOf( +final tokenContainerProvider = tokenContainerNotifierProviderOf( repo: SecureTokenContainerRepository(), containerApi: const PrivacyideaContainerApi(ioClient: PrivacyideaIOClient()), eccUtils: const EccUtils(), diff --git a/lib/views/add_token_manually_view/add_token_manually_view_widgets/rows/add_token_button.dart b/lib/views/add_token_manually_view/add_token_manually_view_widgets/rows/add_token_button.dart index 0b4cfaf90..7cf68132e 100644 --- a/lib/views/add_token_manually_view/add_token_manually_view_widgets/rows/add_token_button.dart +++ b/lib/views/add_token_manually_view/add_token_manually_view_widgets/rows/add_token_button.dart @@ -23,7 +23,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../l10n/app_localizations.dart'; import '../../../../model/tokens/token.dart'; import '../../../../utils/riverpod/riverpod_providers/generated_providers/token_notifier.dart'; -import '../../../../widgets/mutex_button.dart'; +import '../../../../widgets/button_widgets/mutex_button.dart'; class AddTokenButton extends ConsumerWidget { final ValueNotifier autoValidateLabel; diff --git a/lib/views/container_view/container_view.dart b/lib/views/container_view/container_view.dart index 112160945..f7b7a7de1 100644 --- a/lib/views/container_view/container_view.dart +++ b/lib/views/container_view/container_view.dart @@ -45,9 +45,11 @@ class ContainerView extends ConsumerView { @override Widget build(BuildContext context, WidgetRef ref) { - final container = ref.watch(containerCredentialsProvider).whenOrNull(data: (data) => data.container) ?? []; + final container = ref.watch(tokenContainerProvider).whenOrNull(data: (data) => data.container) ?? []; return Scaffold( - appBar: AppBar(title: const Text('Container')), + appBar: AppBar( + title: Text(AppLocalizations.of(context)!.container), + ), floatingActionButton: const QrScannerButton(), floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, body: Center( @@ -94,13 +96,13 @@ class ContainerWidget extends ConsumerWidget { icon: const Icon(Icons.sync), onPressed: () { final tokenState = ref.read(tokenProvider); - ref.read(containerCredentialsProvider.notifier).syncTokens(tokenState); + ref.read(tokenContainerProvider.notifier).syncTokens(tokenState); }, ) : IconButton( icon: const Icon(Icons.delete), onPressed: () { - ref.read(containerCredentialsProvider.notifier).deleteCredential(containerCredential); + ref.read(tokenContainerProvider.notifier).deleteCredential(containerCredential); }, ), ), @@ -118,7 +120,7 @@ class DeleteContainerAction extends PiSlideableAction { @override CustomSlidableAction build(BuildContext context, WidgetRef ref) => CustomSlidableAction( - onPressed: (BuildContext context) => ref.read(containerCredentialsProvider.notifier).deleteCredential(container), + onPressed: (BuildContext context) => ref.read(tokenContainerProvider.notifier).deleteCredential(container), backgroundColor: Theme.of(context).extension()!.deleteColor, child: Column( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/views/feedback_view/feedback_view.dart b/lib/views/feedback_view/feedback_view.dart index 4c34ec6c7..6a742892e 100644 --- a/lib/views/feedback_view/feedback_view.dart +++ b/lib/views/feedback_view/feedback_view.dart @@ -19,15 +19,11 @@ */ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; +import 'package:privacyidea_authenticator/views/feedback_view/widgets/feedback_send_row.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../l10n/app_localizations.dart'; -import '../../utils/app_info_utils.dart'; import '../../utils/globals.dart'; -import '../../utils/pi_mailer.dart'; -import '../../utils/view_utils.dart'; -import '../../widgets/dialog_widgets/default_dialog.dart'; -import '../main_view/main_view.dart'; import '../view_interface.dart'; class FeedbackView extends StatefulView { @@ -44,8 +40,6 @@ class FeedbackView extends StatefulView { class _FeedbackViewState extends State { final TextEditingController _feedbackController = TextEditingController(); - bool _addDeviceInfo = false; - final FocusNode _focusNode = FocusNode(); @override @@ -126,86 +120,14 @@ class _FeedbackViewState extends State { ], ), ), + FeedbackSendRow(feedbackController: _feedbackController), ], ), ), ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - TextButton( - onPressed: () => setState(() => _addDeviceInfo = !_addDeviceInfo), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox( - width: 70, - child: Text( - AppLocalizations.of(context)!.addSystemInfo, - textAlign: TextAlign.right, - style: Theme.of(context).textTheme.bodySmall, - ), - ), - const SizedBox(width: 4), - SizedBox( - width: 24, - height: 24, - child: Checkbox( - value: _addDeviceInfo, - onChanged: (value) { - if (value == null) return; - setState(() { - _addDeviceInfo = value; - }); - }, - ), - ) - ], - ), - ), - ElevatedButton( - onPressed: () async { - final String mailText; - if (_addDeviceInfo) { - mailText = _addDeviceInfoToMail(_feedbackController.text); - } else { - mailText = _feedbackController.text; - } - final sended = await _sendMail(mailText); - if (sended) { - showAsyncDialog( - builder: (context) => DefaultDialog( - title: Text(AppLocalizations.of(context)!.feedbackSentTitle), - content: Text(AppLocalizations.of(context)!.feedbackSentDescription), - actionsAlignment: MainAxisAlignment.center, - actions: [ - ElevatedButton( - onPressed: () => Navigator.of(context).popUntil((route) => route.settings.name == MainView.routeName), - child: Text(AppLocalizations.of(context)!.ok)) - ], - ), - barrierDismissible: false, - ); - } - }, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text(AppLocalizations.of(context)!.send), - const SizedBox(width: 8), - const Icon(Icons.mail_outline), - ], - ), - ), - ], - ), ], ), ), ), ); - - String _addDeviceInfoToMail(String feedback) => '$feedback\n\n[${AppInfoUtils.currentVersionAndBuildNumber}] ${AppInfoUtils.deviceInfoString}'; - Future _sendMail(String mailText) => PiMailer.sendMail(subjectPrefix: 'Feedback', body: mailText, subjectAppVersion: false); } diff --git a/lib/views/feedback_view/widgets/feedback_send_row.dart b/lib/views/feedback_view/widgets/feedback_send_row.dart new file mode 100644 index 000000000..a746414b4 --- /dev/null +++ b/lib/views/feedback_view/widgets/feedback_send_row.dart @@ -0,0 +1,137 @@ +/* + * privacyIDEA Authenticator + * + * Author: Frank Merkel + * + * Copyright (c) 2024 NetKnights GmbH + * + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import 'package:flutter/material.dart'; + +import '../../../l10n/app_localizations.dart'; +import '../../../utils/app_info_utils.dart'; +import '../../../utils/pi_mailer.dart'; +import '../../../utils/view_utils.dart'; +import '../../../widgets/dialog_widgets/default_dialog.dart'; +import '../../main_view/main_view.dart'; + +class FeedbackSendRow extends StatefulWidget { + final TextEditingController feedbackController; + + const FeedbackSendRow({super.key, required this.feedbackController}); + + @override + State createState() => _FeedbackSendRowState(); +} + +class _FeedbackSendRowState extends State { + late final _feedbackController = widget.feedbackController; + bool _addDeviceInfo = false; + + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Expanded(child: SizedBox()), + Expanded( + flex: 4, + child: TextButton( + onPressed: () => setState(() => _addDeviceInfo = !_addDeviceInfo), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Flexible( + child: Text( + AppLocalizations.of(context)!.addSystemInfo, + textAlign: TextAlign.right, + style: Theme.of(context).textTheme.bodySmall, + ), + ), + const SizedBox(width: 4), + SizedBox( + width: 24, + height: 24, + child: Checkbox( + value: _addDeviceInfo, + onChanged: (value) { + if (value == null) return; + setState(() { + _addDeviceInfo = value; + }); + }), + ), + ], + ), + ), + ), + const Expanded(child: SizedBox()), + ], + ), + ), + Expanded( + child: Center( + child: ElevatedButton( + onPressed: () async { + final String mailText; + if (_addDeviceInfo) { + mailText = _addDeviceInfoToMail(_feedbackController.text); + } else { + mailText = _feedbackController.text; + } + final sended = await _sendMail(mailText); + if (sended) { + showAsyncDialog( + builder: (context) => DefaultDialog( + title: Text(AppLocalizations.of(context)!.feedbackSentTitle), + content: Text(AppLocalizations.of(context)!.feedbackSentDescription), + actionsAlignment: MainAxisAlignment.center, + actions: [ + ElevatedButton( + onPressed: () => Navigator.of(context).popUntil((route) => route.settings.name == MainView.routeName), + child: Text(AppLocalizations.of(context)!.ok)) + ], + ), + barrierDismissible: false, + ); + } + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text(AppLocalizations.of(context)!.send), + const SizedBox(width: 8), + const Icon(Icons.mail_outline), + ], + ), + ), + ), + ), + ], + ); + } + + String _addDeviceInfoToMail(String feedback) => '$feedback\n\n[${AppInfoUtils.currentVersionAndBuildNumber}] ${AppInfoUtils.deviceInfoString}'; + Future _sendMail(String mailText) => PiMailer.sendMail(subjectPrefix: 'Feedback', body: mailText, subjectAppVersion: false); +} diff --git a/lib/views/main_view/main_view.dart b/lib/views/main_view/main_view.dart index ba8212bfa..f7730a7c2 100644 --- a/lib/views/main_view/main_view.dart +++ b/lib/views/main_view/main_view.dart @@ -36,6 +36,7 @@ import 'main_view_widgets/expandable_appbar.dart'; import 'main_view_widgets/main_view_navigation_bar.dart'; import 'main_view_widgets/main_view_tokens_list.dart'; import 'main_view_widgets/main_view_tokens_list_filtered.dart'; +import 'main_view_widgets/token_widgets/main_view_background_icon.dart'; export '../../views/main_view/main_view.dart'; @@ -46,11 +47,19 @@ class MainView extends ConsumerStatefulView { RouteSettings get routeSettings => const RouteSettings(name: routeName); final Widget appIcon; + final Widget appImage; final String appName; final bool disablePatchNotes; final BoxConstraints appConstraints; - const MainView({required this.appIcon, required this.appName, required this.disablePatchNotes, super.key, required this.appConstraints}); + const MainView({ + required this.appImage, + required this.appIcon, + required this.appName, + required this.disablePatchNotes, + super.key, + required this.appConstraints, + }); @override ConsumerState createState() => _MainViewState(); @@ -86,10 +95,7 @@ class _MainViewState extends ConsumerState { // maxLines: 2 only works like this. maxLines: 2, // Title can be shown on small screens too. ), - leading: Padding( - padding: const EdgeInsets.all(4), - child: widget.appIcon, - ), + leading: const SizedBox(), actions: [ hasFilter ? AppBarItem( @@ -114,6 +120,7 @@ class _MainViewState extends ConsumerState { child: !hasFilter ? Stack( children: [ + MainViewBackgroundIcon(appImage: widget.appImage), MainViewTokensList(nestedScrollViewKey: globalKey), MainViewNavigationBar(appConstraints: widget.appConstraints), ], diff --git a/lib/views/main_view/main_view_widgets/main_view_navigation_buttons/qr_scanner_button.dart b/lib/views/main_view/main_view_widgets/main_view_navigation_buttons/qr_scanner_button.dart index f46159abd..4676bdbb6 100644 --- a/lib/views/main_view/main_view_widgets/main_view_navigation_buttons/qr_scanner_button.dart +++ b/lib/views/main_view/main_view_widgets/main_view_navigation_buttons/qr_scanner_button.dart @@ -52,7 +52,7 @@ class QrScannerButton extends ConsumerWidget { Navigator.pushNamed(globalNavigatorKey.currentContext!, QRScannerView.routeName).then((qrCode) { final resultHandlers = [ ref.read(tokenProvider.notifier), - ref.read(containerCredentialsProvider.notifier), + ref.read(tokenContainerProvider.notifier), ]; scanQrCode(resultHandlers, qrCode); }); diff --git a/lib/views/main_view/main_view_widgets/token_widgets/default_token_actions/default_edit_action_dialog.dart b/lib/views/main_view/main_view_widgets/token_widgets/default_token_actions/default_edit_action_dialog.dart index 366d6ccd6..2befba810 100644 --- a/lib/views/main_view/main_view_widgets/token_widgets/default_token_actions/default_edit_action_dialog.dart +++ b/lib/views/main_view/main_view_widgets/token_widgets/default_token_actions/default_edit_action_dialog.dart @@ -108,53 +108,52 @@ class _DefaultEditActionDialogState extends ConsumerState + * + * Copyright (c) 2024 NetKnights GmbH + * + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class MainViewBackgroundIcon extends ConsumerWidget { + final Widget appImage; + + const MainViewBackgroundIcon({super.key, required this.appImage}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + final scaffoldBackgroundColor = Theme.of(context).scaffoldBackgroundColor; + final base = isDarkMode ? 0.3 : 0.18; + final blendMode = isDarkMode ? BlendMode.darken : BlendMode.lighten; + return Positioned.fill( + child: Padding( + padding: const EdgeInsets.fromLTRB(36, 4, 36, 60), + child: + // isDarkMode + // ? + FittedBox( + child: ColorFiltered( + colorFilter: ColorFilter.mode(scaffoldBackgroundColor.withOpacity(1 - base), blendMode), + child: ColorFiltered( + colorFilter: ColorFilter.mode(scaffoldBackgroundColor, BlendMode.color), + child: appImage, + ), + ), + // ) + // : + // FittedBox( + // child: ColorFiltered( + // colorFilter: ColorFilter.mode(scaffoldBackgroundColor.withOpacity(0.9), BlendMode.lighten), + // // colorFilter: ColorFilter.matrix([ + // // // Greyscale the child then add a fraction the color value to the backgroundcolor to make it look like a brightened greyscale image + // // -0.393 * base, -0.769 * base, -0.189 * base, 0, r, + // // -0.349 * base, -0.686 * base, -0.168 * base, 0, g, + // // -0.272 * base, -0.534 * base, -0.131 * base, 0, b, + // // 0, 0, 0, 0, a, + // // ]), + // // child: Opacity( + // // opacity: 0.1, + // child: ColorFiltered( + // colorFilter: ColorFilter.mode(scaffoldBackgroundColor, BlendMode.color), + // // child: ColorFiltered( + // // colorFilter: ColorFilter.matrix([ + // // // Greyscale the child then add a fraction the color value to the backgroundcolor to make it look like a brightened greyscale image + // // 0.2126, 0.7152, 0.0722, 0, 0, + // // 0.2126, 0.7152, 0.0722, 0, 0, + // // 0.2126, 0.7152, 0.0722, 0, 0, + // // 0, 0, 0, 1, 0, + // // ]), + // child: appImage, + // ), + // ), + // ), + // ), + ), + ), + ); + } +} +/** + * + * /* + * privacyIDEA Authenticator + * + * Author: Frank Merkel + * + * Copyright (c) 2024 NetKnights GmbH + * + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class MainViewBackgroundIcon extends ConsumerWidget { + final Widget appImage; + + const MainViewBackgroundIcon({super.key, required this.appImage}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + final scaffoldBackgroundColor = Theme.of(context).scaffoldBackgroundColor; + final r = scaffoldBackgroundColor.red.toDouble(); + final g = scaffoldBackgroundColor.green.toDouble(); + final b = scaffoldBackgroundColor.blue.toDouble(); + final a = scaffoldBackgroundColor.alpha.toDouble(); + + final base = isDarkMode ? 0.03 : 0.08; + final asd = isDarkMode ? 1 : 0; + return Positioned.fill( + child: Padding( + padding: const EdgeInsets.fromLTRB(36, 4, 36, 60), + child: FittedBox( + child: ColorFiltered( + colorFilter: ColorFilter.matrix([ + (0.393*base, (0.769*base, (0.189*base, 0, r, // + (0.349*base, (0.686*base, (0.168*base, 0, g, + (0.272*base, (0.534*base, (0.131*base, 0, b, + 0, 0, 0, 0, a, // + ]), + child: ColorFiltered( + colorFilter: ColorFilter.mode( + Colors.transparent, + // scaffoldBackgroundColor, + BlendMode.color, + ), + child: + // isDarkMode + // ? + appImage + // : ColorFiltered( + // colorFilter: ColorFilter.mode( + // scaffoldBackgroundColor, + // isDarkMode ? BlendMode.exclusion : BlendMode.exclusion, + // ), + // child: + // appImage, + ), + ), + ), + // ), + ), + ); + } +} + + */ \ No newline at end of file diff --git a/lib/views/main_view/main_view_widgets/token_widgets/push_token_widgets/rollout_failed_widget.dart b/lib/views/main_view/main_view_widgets/token_widgets/push_token_widgets/rollout_failed_widget.dart index c77f8e476..5187c65db 100644 --- a/lib/views/main_view/main_view_widgets/token_widgets/push_token_widgets/rollout_failed_widget.dart +++ b/lib/views/main_view/main_view_widgets/token_widgets/push_token_widgets/rollout_failed_widget.dart @@ -26,7 +26,7 @@ import '../../../../../model/tokens/push_token.dart'; import '../../../../../utils/globals.dart'; import '../../../../../utils/riverpod/riverpod_providers/generated_providers/token_notifier.dart'; import '../../../../../widgets/dialog_widgets/default_dialog.dart'; -import '../../../../../widgets/press_button.dart'; +import '../../../../../widgets/button_widgets/press_button.dart'; class StartRolloutWidget extends ConsumerWidget { final PushToken token; @@ -59,7 +59,7 @@ class StartRolloutWidget extends ConsumerWidget { ), Expanded( flex: 35, - child: PressButton( + child: CooldownButton( onPressed: () => globalRef?.read(tokenProvider.notifier).rolloutPushToken(token) ?? Future.value(), child: Text( token.rolloutState.rolloutFailed ? localizations.retryRollout : localizations.startRollout, @@ -75,7 +75,7 @@ class StartRolloutWidget extends ConsumerWidget { ), Expanded( flex: 35, - child: PressButton( + child: CooldownButton( style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Theme.of(context).colorScheme.errorContainer)), onPressed: () => _showDialog(), child: Text( diff --git a/lib/views/settings_view/settings_groups/settings_group_container.dart b/lib/views/settings_view/settings_groups/settings_group_container.dart index e761114eb..17cf7234c 100644 --- a/lib/views/settings_view/settings_groups/settings_group_container.dart +++ b/lib/views/settings_view/settings_groups/settings_group_container.dart @@ -19,30 +19,21 @@ */ import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:privacyidea_authenticator/l10n/app_localizations.dart'; +import 'package:privacyidea_authenticator/utils/riverpod/riverpod_providers/generated_providers/token_container_notifier.dart'; import 'package:privacyidea_authenticator/views/container_view/container_view.dart'; -import '../settings_view_widgets/settings_groups.dart'; +import '../settings_view_widgets/settings_group.dart'; -class SettingsGroupContainer extends StatelessWidget { +class SettingsGroupContainer extends ConsumerWidget { const SettingsGroupContainer({super.key}); @override - Widget build(BuildContext context) => SettingsGroup( - title: 'Container', - children: [ - TextButton( - child: ListTile( - title: Text( - 'Container', - style: Theme.of(context).textTheme.bodyMedium, - overflow: TextOverflow.fade, - softWrap: false, - ), - style: ListTileStyle.list, - trailing: Icon(Icons.arrow_forward_ios), - ), - onPressed: () => Navigator.of(context).pushNamed(ContainerView.routeName), - ), - ], + Widget build(BuildContext context, WidgetRef ref) => SettingsGroup( + title: AppLocalizations.of(context)!.container, + onPressed: () => Navigator.of(context).pushNamed(ContainerView.routeName), + isActive: ref.watch(tokenContainerProvider).whenOrNull(data: (data) => data)?.container.isNotEmpty ?? false, + trailingIcon: Icons.arrow_forward_ios, // TODO: Change to container icon when we have one ); } diff --git a/lib/views/settings_view/settings_groups/settings_group_error_log.dart b/lib/views/settings_view/settings_groups/settings_group_error_log.dart index 8e5e2dba2..efa308b63 100644 --- a/lib/views/settings_view/settings_groups/settings_group_error_log.dart +++ b/lib/views/settings_view/settings_groups/settings_group_error_log.dart @@ -21,7 +21,7 @@ import 'package:flutter/material.dart'; import '../../../l10n/app_localizations.dart'; import '../settings_view_widgets/logging_menu.dart'; -import '../settings_view_widgets/settings_groups.dart'; +import '../settings_view_widgets/settings_group.dart'; class SettingsGroupErrorLog extends StatelessWidget { const SettingsGroupErrorLog({super.key}); @@ -29,28 +29,18 @@ class SettingsGroupErrorLog extends StatelessWidget { @override Widget build(BuildContext context) => SettingsGroup( title: AppLocalizations.of(context)!.errorLogTitle, - children: [ - ListTile( - title: Text( - AppLocalizations.of(context)!.logMenu, - style: Theme.of(context).textTheme.bodyMedium, - overflow: TextOverflow.fade, - softWrap: false, - ), - style: ListTileStyle.list, - trailing: ElevatedButton( - child: Text( - AppLocalizations.of(context)!.open, - overflow: TextOverflow.fade, - softWrap: false, - ), - onPressed: () => showDialog( - context: context, - builder: (context) => const LoggingMenu(), - useRootNavigator: false, - ), - ), - ), - ], + onPressed: () => showDialog( + useRootNavigator: false, + context: context, + builder: (_) => const SettingsGroupErrorLogDialog(), + ), + trailingIcon: Icons.error_outline, ); } + +class SettingsGroupErrorLogDialog extends StatelessWidget { + const SettingsGroupErrorLogDialog({super.key}); + + @override + Widget build(BuildContext context) => const LoggingMenu(); +} diff --git a/lib/views/settings_view/settings_groups/settings_group_feedback.dart b/lib/views/settings_view/settings_groups/settings_group_feedback.dart new file mode 100644 index 000000000..11ff111fa --- /dev/null +++ b/lib/views/settings_view/settings_groups/settings_group_feedback.dart @@ -0,0 +1,36 @@ +/* + * privacyIDEA Authenticator + * + * Author: Frank Merkel + * + * Copyright (c) 2024 NetKnights GmbH + * + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import 'package:flutter/material.dart'; + +import '../../../l10n/app_localizations.dart'; +import '../../feedback_view/feedback_view.dart'; +import '../settings_view_widgets/settings_group.dart'; + +class SettingsGroupFeedback extends StatelessWidget { + const SettingsGroupFeedback({super.key}); + + @override + Widget build(BuildContext context) => SettingsGroup( + title: AppLocalizations.of(context)!.feedback, + onPressed: () => Navigator.pushNamed(context, FeedbackView.routeName), + trailingIcon: Icons.feedback, + ); +} diff --git a/lib/views/settings_view/settings_groups/settings_group_general.dart b/lib/views/settings_view/settings_groups/settings_group_general.dart index c520fa3e5..1297f9c55 100644 --- a/lib/views/settings_view/settings_groups/settings_group_general.dart +++ b/lib/views/settings_view/settings_groups/settings_group_general.dart @@ -17,16 +17,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import 'package:fluentui_system_icons/fluentui_system_icons.dart'; import 'package:flutter/material.dart'; import 'package:simple_icons/simple_icons.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../../l10n/app_localizations.dart'; import '../../../utils/globals.dart'; -import '../../feedback_view/feedback_view.dart'; import '../../license_view/license_view.dart'; -import '../settings_view_widgets/settings_groups.dart'; +import '../settings_view_widgets/settings_group.dart'; import '../settings_view_widgets/settings_list_tile_button.dart'; class SettingsGroupGeneral extends StatelessWidget { @@ -71,18 +69,6 @@ class SettingsGroupGeneral extends StatelessWidget { ), icon: const Icon(SimpleIcons.github), ), - SettingsListTileButton( - onPressed: () { - Navigator.pushNamed(context, FeedbackView.routeName); - }, - title: Text( - 'Feedback', - style: Theme.of(context).textTheme.bodyMedium, - overflow: TextOverflow.fade, - softWrap: false, - ), - icon: const Icon(FluentIcons.chat_32_regular), - ), ], ); } diff --git a/lib/views/settings_view/settings_groups/settings_group_import_export_tokens.dart b/lib/views/settings_view/settings_groups/settings_group_import_export_tokens.dart index a2b322a97..0b7361f29 100644 --- a/lib/views/settings_view/settings_groups/settings_group_import_export_tokens.dart +++ b/lib/views/settings_view/settings_groups/settings_group_import_export_tokens.dart @@ -24,10 +24,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../l10n/app_localizations.dart'; import '../../../model/enums/introduction.dart'; import '../../../utils/riverpod/riverpod_providers/generated_providers/introduction_provider.dart'; -import '../../../widgets/countdown_button.dart'; +import '../../../widgets/button_widgets/countdown_button.dart'; import '../../../widgets/dialog_widgets/default_dialog.dart'; import '../../import_tokens_view/import_tokens_view.dart'; -import '../settings_view_widgets/settings_groups.dart'; +import '../settings_view_widgets/settings_group.dart'; import '../settings_view_widgets/settings_list_tile_button.dart'; import 'import_export_tokens_widgets/dialogs/select_export_type_dialog.dart'; diff --git a/lib/views/settings_view/settings_groups/settings_group_language.dart b/lib/views/settings_view/settings_groups/settings_group_language.dart index 775a7bcc9..d8f0f1d02 100644 --- a/lib/views/settings_view/settings_groups/settings_group_language.dart +++ b/lib/views/settings_view/settings_groups/settings_group_language.dart @@ -20,60 +20,85 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:privacyidea_authenticator/model/riverpod_states/settings_state.dart'; +import 'package:privacyidea_authenticator/widgets/dialog_widgets/default_dialog.dart'; import '../../../l10n/app_localizations.dart'; import '../../../utils/riverpod/riverpod_providers/generated_providers/settings_notifier.dart'; -import '../settings_view_widgets/settings_groups.dart'; + +import '../settings_view_widgets/settings_group.dart'; class SettingsGroupLanguage extends ConsumerWidget { const SettingsGroupLanguage({super.key}); + @override + Widget build(BuildContext context, WidgetRef ref) { + return SettingsGroup( + title: AppLocalizations.of(context)!.language, + onPressed: () => showDialog( + useRootNavigator: false, + context: context, + builder: (context) => const SettingsGroupLanguageDialog(), + ), + trailingIcon: Icons.language, + ); + } +} + +class SettingsGroupLanguageDialog extends ConsumerWidget { + const SettingsGroupLanguageDialog({ + super.key, + }); + @override Widget build(BuildContext context, WidgetRef ref) { final localizations = AppLocalizations.of(context)!; final settings = ref.watch(settingsProvider).whenOrNull(data: (data) => data); final useSystemLocale = settings?.useSystemLocale ?? SettingsState.useSystemLocaleDefault; final currentLocale = settings?.currentLocale ?? SettingsState.localeDefault; - return SettingsGroup( - title: localizations.language, - children: [ - SwitchListTile( - title: Text( - localizations.useDeviceLocaleTitle, - style: Theme.of(context).textTheme.bodyMedium, - ), - subtitle: Text( - localizations.useDeviceLocaleDescription, - overflow: TextOverflow.fade, - ), - value: useSystemLocale, - onChanged: (value) => ref.read(settingsProvider.notifier).setUseSystemLocale(value)), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 20), - child: DropdownButton( - disabledHint: Text( - '$currentLocale', - style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.grey), - overflow: TextOverflow.fade, - softWrap: false, + return DefaultDialog( + title: Text(localizations.language), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + SwitchListTile( + title: Text( + localizations.useDeviceLocaleTitle, + style: Theme.of(context).textTheme.bodyMedium, + ), + subtitle: Text( + localizations.useDeviceLocaleDescription, + overflow: TextOverflow.fade, + ), + value: useSystemLocale, + onChanged: (value) => ref.read(settingsProvider.notifier).setUseSystemLocale(value)), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: DropdownButton( + disabledHint: Text( + '$currentLocale', + style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.grey), + overflow: TextOverflow.fade, + softWrap: false, + ), + isExpanded: true, + value: currentLocale, + items: AppLocalizations.supportedLocales.map>((Locale itemLocale) { + return DropdownMenuItem( + value: itemLocale, + child: Text( + '$itemLocale', + overflow: TextOverflow.fade, + style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: useSystemLocale ? Colors.grey : null), + softWrap: false, + ), + ); + }).toList(), + onChanged: useSystemLocale ? null : (value) => ref.read(settingsProvider.notifier).setLocalePreference(value!), ), - isExpanded: true, - value: currentLocale, - items: AppLocalizations.supportedLocales.map>((Locale itemLocale) { - return DropdownMenuItem( - value: itemLocale, - child: Text( - '$itemLocale', - overflow: TextOverflow.fade, - style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: useSystemLocale ? Colors.grey : null), - softWrap: false, - ), - ); - }).toList(), - onChanged: useSystemLocale ? null : (value) => ref.read(settingsProvider.notifier).setLocalePreference(value!), ), - ), - ], + ], + ), ); } } diff --git a/lib/views/settings_view/settings_groups/settings_group_push_token.dart b/lib/views/settings_view/settings_groups/settings_group_push_token.dart index e8915c967..3de11cfe6 100644 --- a/lib/views/settings_view/settings_groups/settings_group_push_token.dart +++ b/lib/views/settings_view/settings_groups/settings_group_push_token.dart @@ -19,123 +19,143 @@ */ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:privacyidea_authenticator/widgets/dialog_widgets/default_dialog.dart'; import '../../../l10n/app_localizations.dart'; import '../../../model/riverpod_states/settings_state.dart'; import '../../../model/tokens/push_token.dart'; import '../../../utils/riverpod/riverpod_providers/generated_providers/settings_notifier.dart'; import '../../../utils/riverpod/riverpod_providers/generated_providers/token_notifier.dart'; -import '../settings_view_widgets/settings_groups.dart'; +import '../settings_view_widgets/settings_group.dart'; import '../settings_view_widgets/update_firebase_token_dialog.dart'; class SettingsGroupPushToken extends ConsumerWidget { - final bool enablePushSettingsGroup; - final List unsupportedPushTokens; const SettingsGroupPushToken({ - required this.enablePushSettingsGroup, - required this.unsupportedPushTokens, super.key, }); @override Widget build(BuildContext context, WidgetRef ref) { - final settingsState = ref.watch(settingsProvider).whenOrNull(data: (data) => data); + final tokens = ref.watch(tokenProvider).tokens; + final enrolledPushTokenList = tokens.whereType().where((e) => e.isRolledOut).toList(); + final unsupportedPushTokens = enrolledPushTokenList.where((e) => e.url == null).toList(); return SettingsGroup( - isActive: enablePushSettingsGroup, title: AppLocalizations.of(context)!.pushToken, - children: [ - ListTile( - title: Text( - AppLocalizations.of(context)!.synchronizePushTokens, - style: Theme.of(context).textTheme.bodyMedium, - ), - subtitle: Text( - AppLocalizations.of(context)!.synchronizesTokensWithServer, - overflow: TextOverflow.fade, - ), - trailing: ElevatedButton( - onPressed: enablePushSettingsGroup - ? () { - showDialog( - useRootNavigator: false, - context: context, - barrierDismissible: false, - builder: (context) => const UpdateFirebaseTokenDialog(), - ); - } - : null, - child: Text( - AppLocalizations.of(context)!.sync, + isActive: enrolledPushTokenList.isNotEmpty, + onPressed: () => showDialog( + useRootNavigator: false, + context: context, + builder: (_) => SettingsGroupPushTokenDialog( + unsupportedPushTokens: unsupportedPushTokens, + ), + ), + trailingIcon: Icons.notifications, + ); + } +} + +class SettingsGroupPushTokenDialog extends ConsumerWidget { + final List unsupportedPushTokens; + const SettingsGroupPushTokenDialog({ + super.key, + required this.unsupportedPushTokens, + }); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final settingsState = ref.watch(settingsProvider).whenOrNull(data: (data) => data); + return DefaultDialog( + title: Text(AppLocalizations.of(context)!.pushToken), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + ListTile( + title: Text( + AppLocalizations.of(context)!.synchronizePushTokens, + style: Theme.of(context).textTheme.bodyMedium, + ), + subtitle: Text( + AppLocalizations.of(context)!.synchronizesTokensWithServer, overflow: TextOverflow.fade, - softWrap: false, + ), + trailing: ElevatedButton( + onPressed: () => showDialog( + useRootNavigator: false, + context: context, + barrierDismissible: false, + builder: (context) => const UpdateFirebaseTokenDialog(), + ), + child: Text( + AppLocalizations.of(context)!.sync, + overflow: TextOverflow.fade, + softWrap: false, + ), ), ), - ), - ListTile( - title: RichText( - text: TextSpan( - children: [ - TextSpan( - text: AppLocalizations.of(context)!.enablePolling, - style: Theme.of(context).textTheme.bodyMedium, - ), - // Add clickable icon to inform user of unsupported push tokens (for polling) - WidgetSpan( - child: Padding( - padding: const EdgeInsets.only(left: 10), - child: unsupportedPushTokens.isNotEmpty && enablePushSettingsGroup - ? GestureDetector( - onTap: () => _showPollingInfo(context, unsupportedPushTokens), - child: const Icon( - Icons.info_outline, - color: Colors.red, - ), - ) - : null, + ListTile( + title: RichText( + text: TextSpan( + children: [ + TextSpan( + text: AppLocalizations.of(context)!.enablePolling, + style: Theme.of(context).textTheme.bodyMedium, ), - ), - ], + // Add clickable icon to inform user of unsupported push tokens (for polling) + WidgetSpan( + child: Padding( + padding: const EdgeInsets.only(left: 10), + child: unsupportedPushTokens.isNotEmpty + ? GestureDetector( + onTap: () => _showPollingInfo(context, unsupportedPushTokens), + child: const Icon( + Icons.info_outline, + color: Colors.red, + ), + ) + : null, + ), + ), + ], + ), ), - ), - subtitle: Text( - AppLocalizations.of(context)!.requestPushChallengesPeriodically, - overflow: TextOverflow.fade, - ), - trailing: Switch( - value: settingsState?.enablePolling ?? SettingsState.enablePollingDefault, - onChanged: enablePushSettingsGroup ? (value) => ref.read(settingsProvider.notifier).setPolling(value) : null, - ), - ), - ListTile( - title: RichText( - text: TextSpan( - children: [ - TextSpan( - text: AppLocalizations.of(context)!.hidePushTokens, - style: Theme.of(context).textTheme.bodyMedium, - ), - ], + subtitle: Text( + AppLocalizations.of(context)!.requestPushChallengesPeriodically, + overflow: TextOverflow.fade, + ), + trailing: Switch( + value: settingsState?.enablePolling ?? SettingsState.enablePollingDefault, + onChanged: (value) => ref.read(settingsProvider.notifier).setPolling(value), ), ), - subtitle: Text( - AppLocalizations.of(context)!.hidePushTokensDescription, - overflow: TextOverflow.fade, - ), - trailing: Switch( - value: settingsState?.hidePushTokens ?? SettingsState.hidePushTokensDefault, - onChanged: enablePushSettingsGroup && ref.watch(tokenProvider).hasOTPTokens - ? (value) => ref.read(settingsProvider.notifier).setHidePushTokens(value) - : null, + ListTile( + title: RichText( + text: TextSpan( + children: [ + TextSpan( + text: AppLocalizations.of(context)!.hidePushTokens, + style: Theme.of(context).textTheme.bodyMedium, + ), + ], + ), + ), + subtitle: Text( + AppLocalizations.of(context)!.hidePushTokensDescription, + overflow: TextOverflow.fade, + ), + trailing: Switch( + value: settingsState?.hidePushTokens ?? SettingsState.hidePushTokensDefault, + onChanged: (value) => ref.read(settingsProvider.notifier).setHidePushTokens(value), + ), ), - ) - ], + ], + ), ); } /// Shows a dialog to the user that displays all push tokens that do not /// support polling. - void _showPollingInfo(BuildContext context, List unsupported) { - showDialog( + void _showPollingInfo(BuildContext context, List unsupported) => showDialog( + useRootNavigator: false, context: context, builder: (BuildContext context) { return AlertDialog( @@ -158,6 +178,6 @@ class SettingsGroupPushToken extends ConsumerWidget { ), ], ); - }); - } + }, + ); } diff --git a/lib/views/settings_view/settings_groups/settings_group_theme.dart b/lib/views/settings_view/settings_groups/settings_group_theme.dart index 38c93f8e7..995165de7 100644 --- a/lib/views/settings_view/settings_groups/settings_group_theme.dart +++ b/lib/views/settings_view/settings_groups/settings_group_theme.dart @@ -22,58 +22,42 @@ import 'package:flutter/material.dart'; import '../../../l10n/app_localizations.dart'; import '../../../utils/home_widget_utils.dart'; -import '../settings_view_widgets/settings_groups.dart'; +import '../settings_view_widgets/settings_group.dart'; class SettingsGroupTheme extends StatelessWidget { const SettingsGroupTheme({super.key}); @override - Widget build(BuildContext context) => SettingsGroup( - title: AppLocalizations.of(context)!.theme, - children: [ - RadioListTile( - title: Text( - AppLocalizations.of(context)!.lightTheme, - style: Theme.of(context).textTheme.bodyMedium, - overflow: TextOverflow.fade, - softWrap: false, - ), - value: ThemeMode.light, - groupValue: EasyDynamicTheme.of(context).themeMode, - controlAffinity: ListTileControlAffinity.trailing, - onChanged: (dynamic value) { - EasyDynamicTheme.of(context).changeTheme(dynamic: false, dark: false); - HomeWidgetUtils().setCurrentThemeMode(ThemeMode.light); - }, - ), - RadioListTile( - title: Text( - AppLocalizations.of(context)!.darkTheme, - style: Theme.of(context).textTheme.bodyMedium, - overflow: TextOverflow.fade, - softWrap: false, - ), - value: ThemeMode.dark, - groupValue: EasyDynamicTheme.of(context).themeMode, - controlAffinity: ListTileControlAffinity.trailing, - onChanged: (dynamic value) { - EasyDynamicTheme.of(context).changeTheme(dynamic: false, dark: true); - HomeWidgetUtils().setCurrentThemeMode(ThemeMode.dark); - }, - ), - RadioListTile( - title: Text( - AppLocalizations.of(context)!.systemTheme, - style: Theme.of(context).textTheme.bodyMedium, - ), - value: ThemeMode.system, - groupValue: EasyDynamicTheme.of(context).themeMode, - controlAffinity: ListTileControlAffinity.trailing, - onChanged: (dynamic value) { - EasyDynamicTheme.of(context).changeTheme(dynamic: true, dark: false); - HomeWidgetUtils().setCurrentThemeMode(ThemeMode.system); - }, - ), - ], - ); + Widget build(BuildContext context) { + final current = EasyDynamicTheme.of(context).themeMode; + return SettingsGroup( + title: AppLocalizations.of(context)!.themeMode, + onPressed: () { + switch (current) { + case ThemeMode.light: + EasyDynamicTheme.of(context).changeTheme(dynamic: false, dark: true); + HomeWidgetUtils().setCurrentThemeMode(ThemeMode.dark); + break; + case ThemeMode.dark: + EasyDynamicTheme.of(context).changeTheme(dynamic: true); + HomeWidgetUtils().setCurrentThemeMode(ThemeMode.system); + break; + case ThemeMode.system: + EasyDynamicTheme.of(context).changeTheme(dynamic: false, dark: false); + HomeWidgetUtils().setCurrentThemeMode(ThemeMode.light); + break; + case null: + EasyDynamicTheme.of(context).changeTheme(dynamic: false, dark: false); + HomeWidgetUtils().setCurrentThemeMode(ThemeMode.light); + break; + } + }, + trailingIcon: switch (current) { + ThemeMode.light => Icons.brightness_5, + ThemeMode.dark => Icons.brightness_4, + ThemeMode.system => Icons.brightness_auto, + null => Icons.question_mark, + }, + ); + } } diff --git a/lib/views/settings_view/settings_view.dart b/lib/views/settings_view/settings_view.dart index 7d85af3b9..a2139125a 100644 --- a/lib/views/settings_view/settings_view.dart +++ b/lib/views/settings_view/settings_view.dart @@ -18,11 +18,8 @@ * limitations under the License. */ import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../l10n/app_localizations.dart'; -import '../../model/tokens/push_token.dart'; -import '../../utils/riverpod/riverpod_providers/generated_providers/token_notifier.dart'; import '../../widgets/push_request_listener.dart'; import '../view_interface.dart'; import 'settings_groups/settings_group_container.dart'; @@ -32,6 +29,7 @@ import 'settings_groups/settings_group_import_export_tokens.dart'; import 'settings_groups/settings_group_language.dart'; import 'settings_groups/settings_group_push_token.dart'; import 'settings_groups/settings_group_theme.dart'; +import 'settings_groups/settings_group_feedback.dart'; class SettingsView extends ConsumerView { @override @@ -41,45 +39,31 @@ class SettingsView extends ConsumerView { const SettingsView({super.key}); @override - Widget build(BuildContext context, WidgetRef ref) { - final tokens = ref.watch(tokenProvider).tokens; - final enrolledPushTokenList = tokens.whereType().where((e) => e.isRolledOut).toList(); - final unsupportedPushTokens = enrolledPushTokenList.where((e) => e.url == null).toList(); - final enablePushSettingsGroup = enrolledPushTokenList.isNotEmpty; - - return PushRequestListener( - child: Scaffold( - appBar: AppBar( - title: Text( - AppLocalizations.of(context)!.settings, - overflow: TextOverflow.ellipsis, // maxLines: 2 only works like this. - maxLines: 2, // Title can be shown on small screens too. + Widget build(BuildContext context, WidgetRef ref) => PushRequestListener( + child: Scaffold( + appBar: AppBar( + title: Text( + AppLocalizations.of(context)!.settings, + overflow: TextOverflow.ellipsis, // maxLines: 2 only works like this. + maxLines: 2, // Title can be shown on small screens too. + ), ), - ), - body: SingleChildScrollView( - padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 10), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SettingsGroupGeneral(), - const Divider(), - const SettingsGroupImportExportTokens(), - const Divider(), - const SettingsGroupTheme(), - const Divider(), - const SettingsGroupLanguage(), - SettingsGroupPushToken( - enablePushSettingsGroup: enablePushSettingsGroup, - unsupportedPushTokens: unsupportedPushTokens, - ), - const Divider(), - const SettingsGroupErrorLog(), - const Divider(), - const SettingsGroupContainer(), - ], + body: const SingleChildScrollView( + padding: EdgeInsets.symmetric(vertical: 20, horizontal: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SettingsGroupFeedback(), + SettingsGroupImportExportTokens(), + SettingsGroupPushToken(), + SettingsGroupContainer(), + SettingsGroupTheme(), + SettingsGroupLanguage(), + SettingsGroupErrorLog(), + SettingsGroupGeneral(), + ], + ), ), ), - ), - ); - } + ); } diff --git a/lib/views/settings_view/settings_view_widgets/settings_group.dart b/lib/views/settings_view/settings_view_widgets/settings_group.dart new file mode 100644 index 000000000..d7055e291 --- /dev/null +++ b/lib/views/settings_view/settings_view_widgets/settings_group.dart @@ -0,0 +1,89 @@ +/* + privacyIDEA Authenticator + + Authors: Timo Sturm + Frank Merkel + Copyright (c) 2017-2024 NetKnights GmbH + + Licensed under the Apache License, Version 2.0 (the 'License'); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an 'AS IS' BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import 'package:flutter/material.dart'; + +import '../../../widgets/button_widgets/default_icon_button.dart'; + +/// Widget that defines the structure and look of groups on the settings screen. +class SettingsGroup extends StatelessWidget { + final String title; + final List children; + final bool isActive; + final void Function()? onPressed; + final IconData? trailingIcon; + + const SettingsGroup({ + super.key, + required this.title, + this.children = const [], + this.isActive = true, + this.onPressed, + this.trailingIcon, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Divider(), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + onPressed != null + ? GestureDetector( + onTap: isActive ? onPressed : null, + child: ListTile( + dense: true, + leading: Text( + title, + style: theme.textTheme.titleLarge?.copyWith(color: isActive ? null : Colors.grey), + overflow: TextOverflow.fade, + softWrap: false, + ), + trailing: DefaultIconButton( + tooltip: title, + onPressed: isActive ? onPressed! : null, + icon: trailingIcon ?? Icons.arrow_forward_ios, + ), + ), + ) + : ListTile( + dense: true, + leading: Text( + title, + style: theme.textTheme.titleLarge?.copyWith(color: isActive ? null : Colors.grey), + overflow: TextOverflow.fade, + softWrap: false, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Column(children: children), + ), + ], + ), + const Divider(), + ], + ); + } +} diff --git a/lib/views/settings_view/settings_view_widgets/settings_groups.dart b/lib/views/settings_view/settings_view_widgets/settings_groups.dart deleted file mode 100644 index 097547f4a..000000000 --- a/lib/views/settings_view/settings_view_widgets/settings_groups.dart +++ /dev/null @@ -1,56 +0,0 @@ -/* - privacyIDEA Authenticator - - Authors: Timo Sturm - Frank Merkel - Copyright (c) 2017-2024 NetKnights GmbH - - Licensed under the Apache License, Version 2.0 (the 'License'); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an 'AS IS' BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -import 'package:flutter/material.dart'; - -/// Widget that defines the structure and look of groups on the settings screen. -class SettingsGroup extends StatelessWidget { - final String _title; - final List _children; - final bool _isActive; - - const SettingsGroup({super.key, required String title, required List children, bool isActive = true}) - : _title = title, - _children = children, - _isActive = isActive; - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ListTile( - dense: true, - leading: Text( - _title, - style: theme.textTheme.titleLarge?.copyWith(color: _isActive ? null : Colors.grey), - overflow: TextOverflow.fade, - softWrap: false, - ), - ), - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: Column(children: _children), - ), - ], - ); - } -} diff --git a/lib/views/splash_screen/splash_screen.dart b/lib/views/splash_screen/splash_screen.dart index 9f4d79c30..e3a650a8e 100644 --- a/lib/views/splash_screen/splash_screen.dart +++ b/lib/views/splash_screen/splash_screen.dart @@ -100,6 +100,7 @@ class _SplashScreenState extends ConsumerState { final ViewWidget nextView = MainView( appName: _customization.appName, appIcon: _customization.appIcon.getWidget, + appImage: _customization.appImage.getWidget, disablePatchNotes: _customization.disabledFeatures.contains(AppFeature.patchNotes), appConstraints: widget.appConstraints, ); diff --git a/lib/widgets/app_wrapper.dart b/lib/widgets/app_wrapper.dart index a5e420b4e..51a8bb3fe 100644 --- a/lib/widgets/app_wrapper.dart +++ b/lib/widgets/app_wrapper.dart @@ -82,7 +82,7 @@ class _AppWrapperState extends ConsumerState<_AppWrapper> { @override Widget build(BuildContext context) { - final container = ref.watch(containerCredentialsProvider).value?.container ?? []; + final container = ref.watch(tokenContainerProvider).value?.container ?? []; Logger.debug('Credentials: $container', name: 'AppWrapper#build'); return SingleTouchRecognizer( child: StateObserver( diff --git a/lib/widgets/countdown_button.dart b/lib/widgets/button_widgets/countdown_button.dart similarity index 98% rename from lib/widgets/countdown_button.dart rename to lib/widgets/button_widgets/countdown_button.dart index 33d84cb65..a50a86dda 100644 --- a/lib/widgets/countdown_button.dart +++ b/lib/widgets/button_widgets/countdown_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import '../model/extensions/color_extension.dart'; +import '../../model/extensions/color_extension.dart'; class CountdownButton extends StatefulWidget { final int countdownSeconds; diff --git a/lib/widgets/button_widgets/default_icon_button.dart b/lib/widgets/button_widgets/default_icon_button.dart new file mode 100644 index 000000000..72f0a6de9 --- /dev/null +++ b/lib/widgets/button_widgets/default_icon_button.dart @@ -0,0 +1,54 @@ +/* + * privacyIDEA Authenticator + * + * Author: Frank Merkel + * + * Copyright (c) 2024 NetKnights GmbH + * + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import 'package:flutter/material.dart'; + +class DefaultIconButton extends StatelessWidget { + final IconData icon; + final Function()? onPressed; + final String tooltip; + final Color? color; + final double size; + final double padding; + + const DefaultIconButton({ + super.key, + required this.icon, + required this.onPressed, + required this.tooltip, + this.color, + this.size = 24, + this.padding = 0, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.all(padding), + child: IconButton( + icon: Icon(icon), + onPressed: onPressed, + tooltip: tooltip, + color: color, + iconSize: size, + splashRadius: size + padding, + ), + ); + } +} diff --git a/lib/widgets/mutex_button.dart b/lib/widgets/button_widgets/mutex_button.dart similarity index 100% rename from lib/widgets/mutex_button.dart rename to lib/widgets/button_widgets/mutex_button.dart diff --git a/lib/widgets/press_button.dart b/lib/widgets/button_widgets/press_button.dart similarity index 67% rename from lib/widgets/press_button.dart rename to lib/widgets/button_widgets/press_button.dart index 8877f9d26..cddb80a9d 100644 --- a/lib/widgets/press_button.dart +++ b/lib/widgets/button_widgets/press_button.dart @@ -1,18 +1,18 @@ import 'package:flutter/material.dart'; -class PressButton extends StatefulWidget { +class CooldownButton extends StatefulWidget { final Future Function() onPressed; final Widget child; - final int delayInMilliseconds; + final int buttonCooldown; final ButtonStyle? style; - const PressButton({super.key, required this.onPressed, required this.child, this.delayInMilliseconds = 1000, this.style}); + const CooldownButton({super.key, required this.onPressed, required this.child, this.buttonCooldown = 1000, this.style}); @override - State createState() => _PressButtonState(); + State createState() => _CooldownButtonState(); } -class _PressButtonState extends State { +class _CooldownButtonState extends State { bool isPressable = true; void press() async { @@ -23,7 +23,7 @@ class _PressButtonState extends State { await Future.wait( [ widget.onPressed(), - Future.delayed(Duration(milliseconds: widget.delayInMilliseconds)), + Future.delayed(Duration(milliseconds: widget.buttonCooldown)), ], ); if (mounted) { diff --git a/lib/widgets/default_refresh_indicator.dart b/lib/widgets/default_refresh_indicator.dart index 4ded61ec4..7a3cc929c 100644 --- a/lib/widgets/default_refresh_indicator.dart +++ b/lib/widgets/default_refresh_indicator.dart @@ -31,7 +31,7 @@ class _DefaultRefreshIndicatorState extends ConsumerState { ) : SizedBox( // Accept button - child: PressButton( + child: CooldownButton( style: ButtonStyle( backgroundColor: WidgetStateProperty.all(pushRequestTheme.acceptColor), shape: buttonShape(context), @@ -157,7 +157,7 @@ class _PushRequestDialogState extends ConsumerState { ), SizedBox( // Decline button - child: PressButton( + child: CooldownButton( style: ButtonStyle( backgroundColor: WidgetStateProperty.all(pushRequestTheme.declineColor), shape: buttonShape(context), @@ -226,7 +226,7 @@ class _PushRequestDialogState extends ConsumerState { const Expanded(child: SizedBox()), Expanded( flex: 6, - child: PressButton( + child: CooldownButton( style: ButtonStyle( shape: buttonShape(context), backgroundColor: WidgetStateProperty.all(pushRequestTheme.acceptColor), @@ -269,7 +269,7 @@ class _PushRequestDialogState extends ConsumerState { const Expanded(flex: 2, child: SizedBox()), Expanded( flex: 6, - child: PressButton( + child: CooldownButton( style: ButtonStyle( backgroundColor: WidgetStateProperty.all(pushRequestTheme.declineColor), shape: buttonShape(context), @@ -351,7 +351,7 @@ class _AnswerSelectionWidgetState extends State> { for (final possibleAnswer in answersThisRow) Expanded( flex: answersThisRow.length * 2, - child: PressButton( + child: CooldownButton( style: ButtonStyle( shape: _PushRequestDialogState.buttonShape(context), backgroundColor: WidgetStateProperty.all(pushRequestTheme.acceptColor),