From fbce91997052b8efcd070102abdf03933cde1dce Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:40 +0100 Subject: [PATCH 01/36] New translations intl_en.arb (Romanian) --- lib/l10n/intl_ro.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_ro.arb diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb new file mode 100644 index 00000000..f23fd183 --- /dev/null +++ b/lib/l10n/intl_ro.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "ro", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 80aba5026cd9e28561dfa2e37edc5ed79a73509f Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:41 +0100 Subject: [PATCH 02/36] New translations intl_en.arb (French) --- lib/l10n/intl_fr.arb | 75 +++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 42 deletions(-) diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 220628fa..e8a7ea70 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1,9 +1,5 @@ { "@@locale": "fr", - "retry": "Réessayer", - "@retry": { - "description": "Label for e.g. a button. Something is tried to be done again." - }, "accept": "Accepter", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." @@ -12,7 +8,7 @@ "@decline": { "description": "Label for e.g. a button. Something gets declined by the user." }, - "editToken": null, + "editToken": "Edit Token", "@editToken": { "description": "Title of the edit token sheet." }, @@ -20,7 +16,7 @@ "@name": { "description": "Describes the field where the tokens name should be entered." }, - "nameFieldEmpty": null, + "nameFieldEmpty": "Name can't be empty", "@nameFieldEmpty": { "description": "Error message when the name field is empty." }, @@ -36,7 +32,7 @@ "@delete": { "description": "Label that describes deleting the token." }, - "saveChanges": null, + "saveChanges": "Save Changes", "@saveChanges": { "description": "Label that describes saving changes to a token." }, @@ -44,7 +40,7 @@ "@dismiss": { "description": "Text of a button that closes a dialog." }, - "next": null, + "next": "Next", "@next": { "description": "Text of a button that goes to the next page." }, @@ -52,19 +48,19 @@ "@addToken": { "description": "The button to open the screen to add tokens by hand." }, - "addTokenTitle": null, + "addTokenTitle": "Pair new Push Token", "@addTokenTitle": { "description": "The title of the token add screen." }, - "addTokenSubtitle": null, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", "@addTokenSubtitle": { "description": "The subtitle of the token add screen." }, - "or": null, + "or": "OR", "@or": { "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." }, - "uploadQrCodeButton": null, + "uploadQrCodeButton": "Upload QR Code", "@uploadQrCodeButton": { "description": "The button in the token add view to upload QR codes as an image." }, @@ -75,7 +71,6 @@ "confirmDeletionOf": "Confirmer la suppression de {name}?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234" @@ -94,7 +89,7 @@ "@phonePart": { "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "tokens": null, + "tokens": "Tokens", "@tokens": { "description": "Button to open the tokens page." }, @@ -102,11 +97,11 @@ "@settings": { "description": "Button to open the settings page." }, - "noSettingsSelected": null, + "noSettingsSelected": "Select a setting", "@noSettingsSelected": { "description": "Message when no setting is selected on tablets." }, - "appearance": null, + "appearance": "Appearance", "@appearance": { "description": "Title of the setting group where the theme can be selected." }, @@ -126,7 +121,7 @@ "@darkTheme": { "description": "The dark theme." }, - "autoTheme": null, + "autoTheme": "Auto", "@autoTheme": { "description": "The automatic theme applied by the system settings." }, @@ -169,7 +164,6 @@ "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" @@ -189,10 +183,13 @@ "@errorSynchronizationNoNetworkConnection": { "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, + "errorRollOutNoConnectionToServer": "El despliegue del token {name} ha fallado, no se ha podido acceder al servidor.", + "@errorRollOutNoConnectionToServer": { + "description": "Tells the user that the roll-out failed because the server could not be reached." + }, "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 ..." @@ -292,11 +289,11 @@ "@lock": { "description": "Description of button that locks a token." }, - "lockDescription": null, + "lockDescription": "Lock a token with biometric authentication.", "@lockDescription": { "description": "Description of the lock option when editing a token." }, - "search": null, + "search": "Search", "@search": { "description": "Placeholder text for search bar." }, @@ -306,11 +303,11 @@ }, "noResultText1": "Appuyez sur le \n", "@noResultText1": { - "description": "first noresult text" + "description": "first no result text" }, "noResultText2": "bouton pour commencer!", "@noResultText2": { - "description": "second noresult text" + "description": "second no result text" }, "onBoardingText1": "Authentification à deux facteurs\nrendue facile", "onBoardingTitle2": "Sécurité Maximale", @@ -325,7 +322,7 @@ "showPrivacyPolicy": "Afficher la déclaration de confidentialité", "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" + "description": "Message for email body" }, "showDetails": "Afficher les détails", "deleteLockedToken": "Veuillez vous authentifier pour supprimer le jeton verrouillé.", @@ -359,22 +356,16 @@ "@rolloutCompleted": { "description": "Message for the rollout process" }, - "errorRollOutNoConnectionToServer": "El despliegue del token {name} ha fallado, no se ha podido acceder al servidor.", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process" - }, "authToAcceptPushRequest": "Veuillez vous authentifier pour accepter la demande de connexion.", - "@authToAcceptPushRequest": { - "description": "authToAcceptPushRequest" - }, "authToDeclinePushRequest": "Veuillez vous authentifier pour refuser la demande de connexion.", - "@authToDeclinePushRequest": { - "description": "authToDeclinePushRequest" - }, "pushRequestParseError": "La demande push n'a pas pu être traitée.", "errorRollOutSSLHandshakeFailed": "Échec de la prise de contact SSL. Le déploiement n'est pas possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, "errorWhenPullingChallenges": "Une erreur s'est produite lors de l'interrogation des défis de {name}", "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", "placeholders": { "name": { "example": "PUSH1234A" @@ -390,8 +381,7 @@ } } }, - "butDiscardIt": "mais l'écarter", - "cameraPermissionPermanentlyDenied": null, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", "cameraPermissionPermanentlyDeniedButton": "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.", @@ -399,11 +389,11 @@ "decryptErrorButtonSendError": "Erreur d'envoi", "decryptErrorButtonRetry": "Réessayer", "decryptErrorDeleteConfirmationContent": "Êtes-vous sûr de vouloir supprimer les données de l'application ?", - "licenses": null, + "licenses": "Open Source Licenses", "@licenses": { "description": "Button to open the licenses page" }, - "appVersion": null, + "appVersion": "App Version", "@appVersion": { "description": "App version info in the About page" }, @@ -411,11 +401,11 @@ "@privacyPolicy": { "description": "Button to open the privacy policy" }, - "website": null, + "website": "Website", "@website": { "description": "Button to open the website" }, - "github": null, + "github": "GitHub", "@github": { "description": "Button to open the GitHub page" }, @@ -424,12 +414,13 @@ "authenticationRequest": "Authentification", "requestInfo": "Envoyé par {issuer} pour votre compte : \"{account}\"", "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { "issuer": { - "exemple": "eduMFA" + "example": "eduMFA" }, "account": { - "exemple": "GitHub" + "example": "GitHub" } } } From 9366465ffebef2fbfc50308c0a423db2eb673acd Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:42 +0100 Subject: [PATCH 03/36] New translations intl_en.arb (Spanish) --- lib/l10n/intl_es.arb | 68 +++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 56e20514..f1a36ce8 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1,9 +1,5 @@ { - "@@locale": "es", - "retry": "Reintentar", - "@retry": { - "description": "Label for e.g. a button. Something is tried to be done again." - }, + "@@locale": "es-ES", "accept": "Aceptar", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." @@ -12,7 +8,7 @@ "@decline": { "description": "Label for e.g. a button. Something gets declined by the user." }, - "editToken": null, + "editToken": "Edit Token", "@editToken": { "description": "Title of the edit token sheet." }, @@ -20,7 +16,7 @@ "@name": { "description": "Describes the field where the tokens name should be entered." }, - "nameFieldEmpty": null, + "nameFieldEmpty": "Name can't be empty", "@nameFieldEmpty": { "description": "Error message when the name field is empty." }, @@ -36,7 +32,7 @@ "@delete": { "description": "Label that describes deleting the token." }, - "saveChanges": null, + "saveChanges": "Save Changes", "@saveChanges": { "description": "Label that describes saving changes to a token." }, @@ -44,7 +40,7 @@ "@dismiss": { "description": "Text of a button that closes a dialog." }, - "next": null, + "next": "Next", "@next": { "description": "Text of a button that goes to the next page." }, @@ -52,19 +48,19 @@ "@addToken": { "description": "The button to open the screen to add tokens by hand." }, - "addTokenTitle": null, + "addTokenTitle": "Pair new Push Token", "@addTokenTitle": { "description": "The title of the token add screen." }, - "addTokenSubtitle": null, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", "@addTokenSubtitle": { "description": "The subtitle of the token add screen." }, - "or": null, + "or": "OR", "@or": { "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." }, - "uploadQrCodeButton": null, + "uploadQrCodeButton": "Upload QR Code", "@uploadQrCodeButton": { "description": "The button in the token add view to upload QR codes as an image." }, @@ -93,7 +89,7 @@ "@phonePart": { "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "tokens": null, + "tokens": "Tokens", "@tokens": { "description": "Button to open the tokens page." }, @@ -101,11 +97,11 @@ "@settings": { "description": "Button to open the settings page." }, - "noSettingsSelected": null, + "noSettingsSelected": "Select a setting", "@noSettingsSelected": { "description": "Message when no setting is selected on tablets." }, - "appearance": null, + "appearance": "Appearance", "@appearance": { "description": "Title of the setting group where the theme can be selected." }, @@ -125,7 +121,7 @@ "@darkTheme": { "description": "The dark theme." }, - "autoTheme": null, + "autoTheme": "Auto", "@autoTheme": { "description": "The automatic theme applied by the system settings." }, @@ -187,7 +183,11 @@ "@errorSynchronizationNoNetworkConnection": { "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, - "errorRollOutUnknownError": null, + "errorRollOutNoConnectionToServer": "El despliegue del token {name} ha fallado, no se ha podido acceder al servidor.", + "@errorRollOutNoConnectionToServer": { + "description": "Tells the user that the roll-out failed because the server could not be reached." + }, + "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": { @@ -233,9 +233,9 @@ "@couldNotSignMessage": { "description": "Tells the user that the message could not be signed." }, - "language": null, + "language": "Language", "@language": { - "description": "Título del grupo de configuración lingüística." + "description": "Title of language setting group." }, "biometricRequiredTitle": "Biometría no configurada", "@biometricRequiredTitle": { @@ -289,11 +289,11 @@ "@lock": { "description": "Description of button that locks a token." }, - "lockDescription": null, + "lockDescription": "Lock a token with biometric authentication.", "@lockDescription": { "description": "Description of the lock option when editing a token." }, - "search": null, + "search": "Search", "@search": { "description": "Placeholder text for search bar." }, @@ -356,21 +356,16 @@ "@rolloutCompleted": { "description": "Message for the rollout process" }, - "errorRollOutNoConnectionToServer": "El despliegue del token {name} ha fallado, no se ha podido acceder al servidor.", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process", - "placeholders": { - "name": { - "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.", "errorRollOutSSLHandshakeFailed": "Ha fallado el protocolo SSL. No es posible el despliegue.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, "errorWhenPullingChallenges": "Se ha producido un error al buscar retos de {name}", "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", "placeholders": { "name": { "example": "PUSH1234A" @@ -386,7 +381,7 @@ } } }, - "cameraPermissionPermanentlyDenied": null, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", "cameraPermissionPermanentlyDeniedButton": "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.", @@ -394,11 +389,11 @@ "decryptErrorButtonSendError": "Enviar error", "decryptErrorButtonRetry": "Reintentar", "decryptErrorDeleteConfirmationContent": "¿Estás seguro de que quieres borrar los datos de la aplicación?", - "licenses": null, + "licenses": "Open Source Licenses", "@licenses": { "description": "Button to open the licenses page" }, - "appVersion": null, + "appVersion": "App Version", "@appVersion": { "description": "App version info in the About page" }, @@ -406,11 +401,11 @@ "@privacyPolicy": { "description": "Button to open the privacy policy" }, - "website": null, + "website": "Website", "@website": { "description": "Button to open the website" }, - "github": null, + "github": "GitHub", "@github": { "description": "Button to open the GitHub page" }, @@ -419,6 +414,7 @@ "authenticationRequest": "Autenticación", "requestInfo": "Enviado por {issuer} para su cuenta: \"{account}\"", "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { "issuer": { "example": "eduMFA" From 35566f592b86b5eb95b583e1c9a3db1c57e3a3af Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:43 +0100 Subject: [PATCH 04/36] New translations intl_en.arb (Afrikaans) --- lib/l10n/intl_af.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_af.arb diff --git a/lib/l10n/intl_af.arb b/lib/l10n/intl_af.arb new file mode 100644 index 00000000..fb282d90 --- /dev/null +++ b/lib/l10n/intl_af.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "af", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 8fad9fbe7278d15b42321ebb1099a771c5f1e383 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:44 +0100 Subject: [PATCH 05/36] New translations intl_en.arb (Arabic) --- lib/l10n/intl_ar.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_ar.arb diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb new file mode 100644 index 00000000..7532fd62 --- /dev/null +++ b/lib/l10n/intl_ar.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "ar", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From c8f7351b525ccee426bed5da18009c53702965d7 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:45 +0100 Subject: [PATCH 06/36] New translations intl_en.arb (Catalan) --- lib/l10n/intl_ca.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_ca.arb diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb new file mode 100644 index 00000000..69973ccd --- /dev/null +++ b/lib/l10n/intl_ca.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "ca", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 11c2e4e9fbb5b784510d05e2ee8f9a6bd94a62d9 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:47 +0100 Subject: [PATCH 07/36] New translations intl_en.arb (Czech) --- lib/l10n/intl_cs.arb | 69 ++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index 99306f0c..affc72a6 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -1,9 +1,5 @@ { "@@locale": "cs", - "retry": "Zkusit znovu", - "@retry": { - "description": "Label for e.g. a button. Something is tried to be done again." - }, "accept": "Přijmout", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." @@ -12,7 +8,7 @@ "@decline": { "description": "Label for e.g. a button. Something gets declined by the user." }, - "editToken": null, + "editToken": "Edit Token", "@editToken": { "description": "Title of the edit token sheet." }, @@ -20,7 +16,7 @@ "@name": { "description": "Describes the field where the tokens name should be entered." }, - "nameFieldEmpty": null, + "nameFieldEmpty": "Name can't be empty", "@nameFieldEmpty": { "description": "Error message when the name field is empty." }, @@ -36,7 +32,7 @@ "@delete": { "description": "Label that describes deleting the token." }, - "saveChanges": null, + "saveChanges": "Save Changes", "@saveChanges": { "description": "Label that describes saving changes to a token." }, @@ -44,7 +40,7 @@ "@dismiss": { "description": "Text of a button that closes a dialog." }, - "next": null, + "next": "Next", "@next": { "description": "Text of a button that goes to the next page." }, @@ -52,19 +48,19 @@ "@addToken": { "description": "The button to open the screen to add tokens by hand." }, - "addTokenTitle": null, + "addTokenTitle": "Pair new Push Token", "@addTokenTitle": { "description": "The title of the token add screen." }, - "addTokenSubtitle": null, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", "@addTokenSubtitle": { "description": "The subtitle of the token add screen." }, - "or": null, + "or": "OR", "@or": { "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." }, - "uploadQrCodeButton": null, + "uploadQrCodeButton": "Upload QR Code", "@uploadQrCodeButton": { "description": "The button in the token add view to upload QR codes as an image." }, @@ -75,7 +71,6 @@ "confirmDeletionOf": "Opravdu chcete smazat token {name}?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234" @@ -94,7 +89,7 @@ "@phonePart": { "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "tokens": null, + "tokens": "Tokens", "@tokens": { "description": "Button to open the tokens page." }, @@ -102,11 +97,11 @@ "@settings": { "description": "Button to open the settings page." }, - "noSettingsSelected": null, + "noSettingsSelected": "Select a setting", "@noSettingsSelected": { "description": "Message when no setting is selected on tablets." }, - "appearance": null, + "appearance": "Appearance", "@appearance": { "description": "Title of the setting group where the theme can be selected." }, @@ -126,7 +121,7 @@ "@darkTheme": { "description": "The dark theme." }, - "autoTheme": null, + "autoTheme": "Auto", "@autoTheme": { "description": "The automatic theme applied by the system settings." }, @@ -169,7 +164,6 @@ "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" @@ -189,10 +183,13 @@ "@errorSynchronizationNoNetworkConnection": { "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, + "errorRollOutNoConnectionToServer": "Registrace tokenu {name} selhala. Server není dostupný.", + "@errorRollOutNoConnectionToServer": { + "description": "Tells the user that the roll-out failed because the server could not be reached." + }, "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 ..." @@ -292,25 +289,25 @@ "@lock": { "description": "Description of button that locks a token." }, - "lockDescription": null, + "lockDescription": "Lock a token with biometric authentication.", "@lockDescription": { "description": "Description of the lock option when editing a token." }, - "search": null, + "search": "Search", "@search": { "description": "Placeholder text for search bar." }, "noResultTitle": "Nejsou nainstalovány žádné tokeny.", "@noResultTitle": { - "description": "No tokens installed yet." + "description": "No tokens stored yet." }, "noResultText1": "stiskněte tlačítko ", "@noResultText1": { - "description": "first noresult text" + "description": "first no result text" }, "noResultText2": " a začněte s používáním.", "@noResultText2": { - "description": "second noresult text" + "description": "second no result text" }, "onBoardingText1": "vícefázové ověření\nusnadněno", "onBoardingTitle2": "Maximální Bezpečnost", @@ -359,21 +356,16 @@ "@rolloutCompleted": { "description": "Message for the rollout process" }, - "errorRollOutNoConnectionToServer": "Registrace tokenu {name} selhala. Server není dostupný.", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process", - "placeholders": { - "name": { - "example": "PUSH1234A" - } - } - }, "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.", "errorRollOutSSLHandshakeFailed": "SSL handshake se nezdařil. Roll-out není možný.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, "errorWhenPullingChallenges": "Při dotazování na výzvy {name} došlo k chybě.", "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", "placeholders": { "name": { "example": "PUSH1234A" @@ -389,7 +381,7 @@ } } }, - "cameraPermissionPermanentlyDenied": null, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", "cameraPermissionPermanentlyDeniedButton": "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.", @@ -397,11 +389,11 @@ "decryptErrorButtonSendError": "Odeslat chybu", "decryptErrorButtonRetry": "Opakování", "decryptErrorDeleteConfirmationContent": "Jste si jisti, že chcete data aplikace odstranit?", - "licenses": null, + "licenses": "Open Source Licenses", "@licenses": { "description": "Button to open the licenses page" }, - "appVersion": null, + "appVersion": "App Version", "@appVersion": { "description": "App version info in the About page" }, @@ -409,11 +401,11 @@ "@privacyPolicy": { "description": "Button to open the privacy policy" }, - "website": null, + "website": "Website", "@website": { "description": "Button to open the website" }, - "github": null, + "github": "GitHub", "@github": { "description": "Button to open the GitHub page" }, @@ -422,6 +414,7 @@ "authenticationRequest": "Žádost o ověření", "requestInfo": "Odesláno {issuer} pro váš účet: \"{account}\"", "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { "issuer": { "example": "eduMFA" From b6df3b876fd02017cb5f55e7a27b54db05cd0dba Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:48 +0100 Subject: [PATCH 08/36] New translations intl_en.arb (Danish) --- lib/l10n/intl_da.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_da.arb diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb new file mode 100644 index 00000000..a6feec23 --- /dev/null +++ b/lib/l10n/intl_da.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "da", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 022e49e4d9c3cd28715f6aeb9d17691636befce3 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:49 +0100 Subject: [PATCH 09/36] New translations intl_en.arb (German) --- lib/l10n/intl_de.arb | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 88a25e7d..01e43d9b 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1,9 +1,5 @@ { "@@locale": "de", - "retry": "Erneut versuchen", - "@retry": { - "description": "Label for e.g. a button. Something is tried to be done again." - }, "accept": "Akzeptieren", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." @@ -187,6 +183,10 @@ "@errorSynchronizationNoNetworkConnection": { "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, + "errorRollOutNoConnectionToServer": "Der Rollout von Token {name} ist fehlgeschlagen, der Server konnte nicht erreicht werden.", + "@errorRollOutNoConnectionToServer": { + "description": "Tells the user that the roll-out failed because the server could not be reached." + }, "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.", @@ -299,7 +299,7 @@ }, "noResultTitle": "Keine Token vorhanden.", "@noResultTitle": { - "description": "No tokens installed yet." + "description": "No tokens stored yet." }, "noResultText1": "Tippe auf das ", "@noResultText1": { @@ -349,20 +349,29 @@ "description": "Message for the rollout process" }, "parsingResponseFailed": "Analysieren der Antwort fehlgeschlagen", + "@parsingResponseFailed": { + "description": "Message for the rollout process" + }, "rolloutCompleted": "Ausrollen abgeschlossen", + "@rolloutCompleted": { + "description": "Message for the rollout process" + }, + "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.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, "errorWhenPullingChallenges": "Fehler beim Abrufen der Authentifizierungsanfragen von {name}", "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", "placeholders": { "name": { "example": "PUSH1234A" } } }, - "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": { @@ -405,11 +414,12 @@ "authenticationRequest": "Authentifizierung", "requestInfo": "Gesendet von {issuer} für Ihr Konto: \"{account}\"", "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { "issuer": { "example": "eduMFA" }, - "Konto": { + "account": { "example": "GitHub" } } From 3d849ba881c2bcf494ee4644138519915d59adaf Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:50 +0100 Subject: [PATCH 10/36] New translations intl_en.arb (Greek) --- lib/l10n/intl_el.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_el.arb diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb new file mode 100644 index 00000000..c7f0ff2e --- /dev/null +++ b/lib/l10n/intl_el.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "el", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From c1e8e2fee84b2f79459739ca90be27bfdbbbce3f Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:51 +0100 Subject: [PATCH 11/36] New translations intl_en.arb (Finnish) --- lib/l10n/intl_fi.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_fi.arb diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb new file mode 100644 index 00000000..da3c0051 --- /dev/null +++ b/lib/l10n/intl_fi.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "fi", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 52ece5d94fef8e7099cd368e39dc65ce56271b1b Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:52 +0100 Subject: [PATCH 12/36] New translations intl_en.arb (Hebrew) --- lib/l10n/intl_he.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_he.arb diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb new file mode 100644 index 00000000..2aecda3e --- /dev/null +++ b/lib/l10n/intl_he.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "he", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From dbafbf080e022377f874663c49349a686d1e3978 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:53 +0100 Subject: [PATCH 13/36] New translations intl_en.arb (Hungarian) --- lib/l10n/intl_hu.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_hu.arb diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb new file mode 100644 index 00000000..771626c1 --- /dev/null +++ b/lib/l10n/intl_hu.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "hu", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 27d314032a05de03b8dec99bd8722aee642d3c8c Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:54 +0100 Subject: [PATCH 14/36] New translations intl_en.arb (Italian) --- lib/l10n/intl_it.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_it.arb diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb new file mode 100644 index 00000000..159ebf61 --- /dev/null +++ b/lib/l10n/intl_it.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "it", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 48c6631cc402f95d612229b7c301adab346be0e5 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:55 +0100 Subject: [PATCH 15/36] New translations intl_en.arb (Japanese) --- lib/l10n/intl_ja.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_ja.arb diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb new file mode 100644 index 00000000..c2aea99e --- /dev/null +++ b/lib/l10n/intl_ja.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "ja", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 029c6ae18924404e0c6a5470a21e9583573f49da Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:56 +0100 Subject: [PATCH 16/36] New translations intl_en.arb (Korean) --- lib/l10n/intl_ko.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_ko.arb diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb new file mode 100644 index 00000000..9b449d54 --- /dev/null +++ b/lib/l10n/intl_ko.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "ko", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 45f98729a7fe933bc1245786ae943ca12f1affb1 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:58 +0100 Subject: [PATCH 17/36] New translations intl_en.arb (Dutch) --- lib/l10n/intl_nl.arb | 64 ++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 6eba9d3e..97c93a6b 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -8,7 +8,7 @@ "@decline": { "description": "Label for e.g. a button. Something gets declined by the user." }, - "editToken": null, + "editToken": "Edit Token", "@editToken": { "description": "Title of the edit token sheet." }, @@ -16,7 +16,7 @@ "@name": { "description": "Describes the field where the tokens name should be entered." }, - "nameFieldEmpty": null, + "nameFieldEmpty": "Name can't be empty", "@nameFieldEmpty": { "description": "Error message when the name field is empty." }, @@ -32,7 +32,7 @@ "@delete": { "description": "Label that describes deleting the token." }, - "saveChanges": null, + "saveChanges": "Save Changes", "@saveChanges": { "description": "Label that describes saving changes to a token." }, @@ -40,7 +40,7 @@ "@dismiss": { "description": "Text of a button that closes a dialog." }, - "next": null, + "next": "Next", "@next": { "description": "Text of a button that goes to the next page." }, @@ -48,19 +48,19 @@ "@addToken": { "description": "The button to open the screen to add tokens by hand." }, - "addTokenTitle": null, + "addTokenTitle": "Pair new Push Token", "@addTokenTitle": { "description": "The title of the token add screen." }, - "addTokenSubtitle": null, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", "@addTokenSubtitle": { "description": "The subtitle of the token add screen." }, - "or": null, + "or": "OR", "@or": { "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." }, - "uploadQrCodeButton": null, + "uploadQrCodeButton": "Upload QR Code", "@uploadQrCodeButton": { "description": "The button in the token add view to upload QR codes as an image." }, @@ -89,7 +89,7 @@ "@phonePart": { "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "tokens": null, + "tokens": "Tokens", "@tokens": { "description": "Button to open the tokens page." }, @@ -97,11 +97,11 @@ "@settings": { "description": "Button to open the settings page." }, - "noSettingsSelected": null, + "noSettingsSelected": "Select a setting", "@noSettingsSelected": { "description": "Message when no setting is selected on tablets." }, - "appearance": null, + "appearance": "Appearance", "@appearance": { "description": "Title of the setting group where the theme can be selected." }, @@ -121,7 +121,7 @@ "@darkTheme": { "description": "The dark theme." }, - "autoTheme": null, + "autoTheme": "Auto", "@autoTheme": { "description": "The automatic theme applied by the system settings." }, @@ -183,10 +183,13 @@ "@errorSynchronizationNoNetworkConnection": { "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, + "errorRollOutNoConnectionToServer": "Uitrollen mislukt. Geen verbinding met de server.", + "@errorRollOutNoConnectionToServer": { + "description": "Tells the user that the roll-out failed because the server could not be reached." + }, "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 ..." @@ -286,25 +289,25 @@ "@lock": { "description": "Description of button that locks a token." }, - "lockDescription": null, + "lockDescription": "Lock a token with biometric authentication.", "@lockDescription": { "description": "Description of the lock option when editing a token." }, - "search": null, + "search": "Search", "@search": { "description": "Placeholder text for search bar." }, "noResultTitle": "Nog geen token opgeslagen.", "@noResultTitle": { - "description": "No tokens installed yet." + "description": "No tokens stored yet." }, "noResultText1": "Tik op ", "@noResultText1": { - "description": "first noresult text" + "description": "first no result text" }, "noResultText2": " de knop om te beginnen!", "@noResultText2": { - "description": "second noresult text" + "description": "second no result text" }, "onBoardingText1": "Twee-factoren authenticatie\nmakkelijk gemaakt", "onBoardingTitle2": "Maximale Beveiliging", @@ -353,25 +356,16 @@ "@rolloutCompleted": { "description": "Message for the rollout process" }, - "errorRollOutNoConnectionToServer": "Uitrollen mislukt. Geen verbinding met de server.", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process" - }, "authToAcceptPushRequest": "Authenticeer om de push aanvraag te accepteren.", - "@authToAcceptPushRequest": { - "description": "Message for the rollout process" - }, "authToDeclinePushRequest": "Authenticeer om de push aanvraag te weigeren.", - "@authToDeclinePushRequest": { - "description": "Message for the rollout process" - }, "pushRequestParseError": "Het pushverzoek kon niet worden verwerkt.", "errorRollOutSSLHandshakeFailed": "SSL-handdruk mislukt. Uitrollen niet mogelijk.", "@errorRollOutSSLHandshakeFailed": { - "description": "Message for the rollout process" + "description": "Tells the user that the roll-out failed because the SSL handshake failed." }, "errorWhenPullingChallenges": "Er is een fout opgetreden bij het zoeken naar uitdagingen van {name}", "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", "placeholders": { "name": { "example": "PUSH1234A" @@ -387,8 +381,7 @@ } } }, - "butDiscardIt": "maar verwijder", - "cameraPermissionPermanentlyDenied": null, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", "cameraPermissionPermanentlyDeniedButton": "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.", @@ -396,11 +389,11 @@ "decryptErrorButtonSendError": "Fout verzenden", "decryptErrorButtonRetry": "Opnieuw proberen", "decryptErrorDeleteConfirmationContent": "Weet je zeker dat je de app-gegevens wilt verwijderen?", - "licenses": null, + "licenses": "Open Source Licenses", "@licenses": { "description": "Button to open the licenses page" }, - "appVersion": null, + "appVersion": "App Version", "@appVersion": { "description": "App version info in the About page" }, @@ -408,11 +401,11 @@ "@privacyPolicy": { "description": "Button to open the privacy policy" }, - "website": null, + "website": "Website", "@website": { "description": "Button to open the website" }, - "github": null, + "github": "GitHub", "@github": { "description": "Button to open the GitHub page" }, @@ -421,6 +414,7 @@ "authenticationRequest": "Verificatieverzoek", "requestInfo": "Verzonden door {issuer} voor uw account: \"{account}\"", "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { "issuer": { "example": "eduMFA" From 6c0eb16990154334e42a1269af339a2c0550188e Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:12:59 +0100 Subject: [PATCH 18/36] New translations intl_en.arb (Norwegian) --- lib/l10n/intl_no.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_no.arb diff --git a/lib/l10n/intl_no.arb b/lib/l10n/intl_no.arb new file mode 100644 index 00000000..fefbe918 --- /dev/null +++ b/lib/l10n/intl_no.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "no", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From f3a167636811655dc56559bf662c2f0d96518253 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:00 +0100 Subject: [PATCH 19/36] New translations intl_en.arb (Polish) --- lib/l10n/intl_pl.arb | 68 +++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index bbe08571..e74c0230 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -8,7 +8,7 @@ "@decline": { "description": "Label for e.g. a button. Something gets declined by the user." }, - "editToken": null, + "editToken": "Edit Token", "@editToken": { "description": "Title of the edit token sheet." }, @@ -16,7 +16,7 @@ "@name": { "description": "Describes the field where the tokens name should be entered." }, - "nameFieldEmpty": null, + "nameFieldEmpty": "Name can't be empty", "@nameFieldEmpty": { "description": "Error message when the name field is empty." }, @@ -32,7 +32,7 @@ "@delete": { "description": "Label that describes deleting the token." }, - "saveChanges": null, + "saveChanges": "Save Changes", "@saveChanges": { "description": "Label that describes saving changes to a token." }, @@ -40,7 +40,7 @@ "@dismiss": { "description": "Text of a button that closes a dialog." }, - "next": null, + "next": "Next", "@next": { "description": "Text of a button that goes to the next page." }, @@ -48,19 +48,19 @@ "@addToken": { "description": "The button to open the screen to add tokens by hand." }, - "addTokenTitle": null, + "addTokenTitle": "Pair new Push Token", "@addTokenTitle": { "description": "The title of the token add screen." }, - "addTokenSubtitle": null, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", "@addTokenSubtitle": { "description": "The subtitle of the token add screen." }, - "or": null, + "or": "OR", "@or": { "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." }, - "uploadQrCodeButton": null, + "uploadQrCodeButton": "Upload QR Code", "@uploadQrCodeButton": { "description": "The button in the token add view to upload QR codes as an image." }, @@ -71,7 +71,6 @@ "confirmDeletionOf": "Jesteś pewien, że chcesz usunąć token: {name}?", "@confirmDeletionOf": { "description": "Asks for confirmation on deleting a token.", - "type": "text", "placeholders": { "name": { "example": "PUSH1234" @@ -90,7 +89,7 @@ "@phonePart": { "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." }, - "tokens": null, + "tokens": "Tokens", "@tokens": { "description": "Button to open the tokens page." }, @@ -98,11 +97,11 @@ "@settings": { "description": "Button to open the settings page." }, - "noSettingsSelected": null, + "noSettingsSelected": "Select a setting", "@noSettingsSelected": { "description": "Message when no setting is selected on tablets." }, - "appearance": null, + "appearance": "Appearance", "@appearance": { "description": "Title of the setting group where the theme can be selected." }, @@ -122,7 +121,7 @@ "@darkTheme": { "description": "The dark theme." }, - "autoTheme": null, + "autoTheme": "Auto", "@autoTheme": { "description": "The automatic theme applied by the system settings." }, @@ -165,7 +164,6 @@ "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" @@ -185,10 +183,13 @@ "@errorSynchronizationNoNetworkConnection": { "description": "Tells the user that synchronizing the push tokens failed because the server could not be reached." }, + "errorRollOutNoConnectionToServer": "Brak połączenia z serwerem", + "@errorRollOutNoConnectionToServer": { + "description": "Tells the user that the roll-out failed because the server could not be reached." + }, "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 ..." @@ -288,25 +289,25 @@ "@lock": { "description": "Description of button that locks a token." }, - "lockDescription": null, + "lockDescription": "Lock a token with biometric authentication.", "@lockDescription": { "description": "Description of the lock option when editing a token." }, - "search": null, + "search": "Search", "@search": { "description": "Placeholder text for search bar." }, "noResultTitle": "Nie zainstalowano jeszcze żadnego tokenu.", "@noResultTitle": { - "description": "No tokens installed yet." + "description": "No tokens stored yet." }, "noResultText1": "Dotknij ", "@noResultText1": { - "description": "first noresult text" + "description": "first no result text" }, "noResultText2": " przycisku, żeby zacząć!", "@noResultText2": { - "description": "second noresult text" + "description": "second no result text" }, "onBoardingText1": "Uwierzytelnianie dwuskładnikowe\nuczynione prostym", "onBoardingTitle2": "Maksymalne Bezpieczeństwo", @@ -355,19 +356,16 @@ "@rolloutCompleted": { "description": "Message for the rollout process" }, - "errorRollOutNoConnectionToServer": "Brak połączenia z serwerem", - "@errorRollOutNoConnectionToServer": { - "description": "Message for the rollout process" - }, "authToAcceptPushRequest": "Uwierzytelnij, aby zaakceptować żądanie push.", - "@authToAcceptPushRequest": { - "description": "Message for the rollout process" - }, "authToDeclinePushRequest": "Uwierzytelnij, aby odrzucić żądanie push.", "pushRequestParseError": "Żądanie push nie mogło zostać przetworzone.", "errorRollOutSSLHandshakeFailed": "Uścisk dłoni SSL nie powiódł się. Rozwijanie nie jest możliwe.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, "errorWhenPullingChallenges": "Wystąpił błąd podczas odpytywania o wyzwania {name}", "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", "placeholders": { "name": { "example": "PUSH1234A" @@ -383,20 +381,19 @@ } } }, - "butDiscardIt": "ale odrzucić go", - "cameraPermissionPermanentlyDenied": null, - "cameraPermissionPermanentlyDeniedButton": null, - "decryptErrorTitle": null, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", - "licenses": null, + "licenses": "Open Source Licenses", "@licenses": { "description": "Button to open the licenses page" }, - "appVersion": null, + "appVersion": "App Version", "@appVersion": { "description": "App version info in the About page" }, @@ -404,11 +401,11 @@ "@privacyPolicy": { "description": "Button to open the privacy policy" }, - "website": null, + "website": "Website", "@website": { "description": "Button to open the website" }, - "github": null, + "github": "GitHub", "@github": { "description": "Button to open the GitHub page" }, @@ -417,6 +414,7 @@ "authenticationRequest": "Żądanie uwierzytelnienia", "requestInfo": "Wysłane przez {issuer} dla twojego konta: \"{account}\"", "@requestInfo": { + "description": "Description of the authentication request.", "placeholders": { "issuer": { "example": "eduMFA" From bb80d224d174d8c38a71beb6ce1d59cde61df882 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:01 +0100 Subject: [PATCH 20/36] New translations intl_en.arb (Portuguese) --- lib/l10n/intl_pt.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_pt.arb diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb new file mode 100644 index 00000000..3bc06b81 --- /dev/null +++ b/lib/l10n/intl_pt.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "pt-PT", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From dd667598bc52b769ec22cf4fd269e575e53db262 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:04 +0100 Subject: [PATCH 21/36] New translations intl_en.arb (Russian) --- lib/l10n/intl_ru.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_ru.arb diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb new file mode 100644 index 00000000..cafdd3a8 --- /dev/null +++ b/lib/l10n/intl_ru.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "ru", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 8ed2237168d952ba6dda88ee1074bdc104055a09 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:06 +0100 Subject: [PATCH 22/36] New translations intl_en.arb (Serbian (Cyrillic)) --- lib/l10n/intl_sr.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_sr.arb diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb new file mode 100644 index 00000000..30ff3cd5 --- /dev/null +++ b/lib/l10n/intl_sr.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "sr", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 85701609fc00b38c0c70bf667413d59452ce0aaf Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:07 +0100 Subject: [PATCH 23/36] New translations intl_en.arb (Swedish) --- lib/l10n/intl_sv.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_sv.arb diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb new file mode 100644 index 00000000..40191d99 --- /dev/null +++ b/lib/l10n/intl_sv.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "sv-SE", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From f0dd1d5932ee74e5148b2c57c3e17ce912c3ea19 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:08 +0100 Subject: [PATCH 24/36] New translations intl_en.arb (Turkish) --- lib/l10n/intl_tr.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_tr.arb diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb new file mode 100644 index 00000000..9d16f3cc --- /dev/null +++ b/lib/l10n/intl_tr.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "tr", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From aefc0765f98764614d32ad49924ec1e8a2133a50 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:09 +0100 Subject: [PATCH 25/36] New translations intl_en.arb (Ukrainian) --- lib/l10n/intl_uk.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_uk.arb diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb new file mode 100644 index 00000000..b36a8a25 --- /dev/null +++ b/lib/l10n/intl_uk.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "uk", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 7d4929b4cc302b05919604cc986de99d6436fc62 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:10 +0100 Subject: [PATCH 26/36] New translations intl_en.arb (Chinese Simplified) --- lib/l10n/intl_zh.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_zh.arb diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb new file mode 100644 index 00000000..c3cd11e0 --- /dev/null +++ b/lib/l10n/intl_zh.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "zh-CN", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 455ec83068e7beb92557a4d473bc32bd70ec0660 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:11 +0100 Subject: [PATCH 27/36] New translations intl_en.arb (Chinese Traditional) --- lib/l10n/intl_zh.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index c3cd11e0..0e82752b 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -1,5 +1,5 @@ { - "@@locale": "zh-CN", + "@@locale": "zh-TW", "accept": "Accept", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." From 0d120e2b00c1027438b89a0f09094d81f71af349 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:13 +0100 Subject: [PATCH 28/36] New translations intl_en.arb (Vietnamese) --- lib/l10n/intl_vi.arb | 427 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 lib/l10n/intl_vi.arb diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb new file mode 100644 index 00000000..0430d289 --- /dev/null +++ b/lib/l10n/intl_vi.arb @@ -0,0 +1,427 @@ +{ + "@@locale": "vi", + "accept": "Accept", + "@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." + }, + "editToken": "Edit Token", + "@editToken": { + "description": "Title of the edit token sheet." + }, + "name": "Name", + "@name": { + "description": "Describes the field where the tokens name should be entered." + }, + "nameFieldEmpty": "Name can't be empty", + "@nameFieldEmpty": { + "description": "Error message when the name field is empty." + }, + "secretKey": "Secret key", + "@secretKey": { + "description": "Describes the field where the tokens secret should be entered." + }, + "cancel": "Cancel", + "@cancel": { + "description": "Button to cancel an action." + }, + "delete": "Delete", + "@delete": { + "description": "Label that describes deleting the token." + }, + "saveChanges": "Save Changes", + "@saveChanges": { + "description": "Label that describes saving changes to a token." + }, + "dismiss": "Dismiss", + "@dismiss": { + "description": "Text of a button that closes a dialog." + }, + "next": "Next", + "@next": { + "description": "Text of a button that goes to the next page." + }, + "addToken": "Add token", + "@addToken": { + "description": "The button to open the screen to add tokens by hand." + }, + "addTokenTitle": "Pair new Push Token", + "@addTokenTitle": { + "description": "The title of the token add screen." + }, + "addTokenSubtitle": "Point your camera at your screen to capture the QR code", + "@addTokenSubtitle": { + "description": "The subtitle of the token add screen." + }, + "or": "OR", + "@or": { + "description": "This is shown as a splitter between the option to add a new token by either scanning a QR code OR uploading one as a file." + }, + "uploadQrCodeButton": "Upload QR Code", + "@uploadQrCodeButton": { + "description": "The button in the token add view to upload QR codes as an image." + }, + "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." + }, + "generatingPhonePart": "Generating phone part", + "@generatingPhonePart": { + "description": "Title of a dialog telling the user that the phone part gets generated right now." + }, + "phonePart": "Phone part:", + "@phonePart": { + "description": "Title of a dialog telling the user that the phone was generated, and it is shown to the user." + }, + "tokens": "Tokens", + "@tokens": { + "description": "Button to open the tokens page." + }, + "settings": "Settings", + "@settings": { + "description": "Button to open the settings page." + }, + "noSettingsSelected": "Select a setting", + "@noSettingsSelected": { + "description": "Message when no setting is selected on tablets." + }, + "appearance": "Appearance", + "@appearance": { + "description": "Title of the setting group where the theme can be selected." + }, + "pushToken": "Push Token", + "@pushToken": { + "description": "Title for the settings block concerning the push tokens." + }, + "theme": "Theme", + "@theme": { + "description": "Title of the setting group where the theme can be selected." + }, + "lightTheme": "Light", + "@lightTheme": { + "description": "The light theme." + }, + "darkTheme": "Dark", + "@darkTheme": { + "description": "The dark theme." + }, + "autoTheme": "Auto", + "@autoTheme": { + "description": "The automatic theme applied by the system settings." + }, + "enablePolling": "Enable polling", + "@enablePolling": { + "description": "Name of the setting switch that enables polling." + }, + "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." + }, + "synchronizePushTokens": "Synchronize push tokens", + "@synchronizePushTokens": { + "description": "Title of synchronizing push tokens in settings." + }, + "synchronizesTokensWithServer": "Synchronizes tokens with the eduMFA server.", + "@synchronizesTokensWithServer": { + "description": "Description of synchronizing push tokens in settings." + }, + "sync": "Sync", + "@sync": { + "description": "Text of button that is used to synchronize push tokens." + }, + "synchronizingTokens": "Synchronizing tokens.", + "@synchronizingTokens": { + "description": "Title of the push synchronization dialog." + }, + "allTokensSynchronized": "All tokens are synchronized.", + "@allTokensSynchronized": { + "description": "Content of the push synchronization dialog. Signaling the user that everything worked." + }, + "synchronizationFailed": "Synchronization failed for the following tokens, please try again:", + "@synchronizationFailed": { + "description": "Headline for the list of tokens where the synchronization failed." + }, + "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." + }, + "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" + } + } + }, + "statusCode": "Status code: {statusCode}", + "@statusCode": { + "description": "Tells the user the status code of the error.", + "placeholders": { + "statusCode": { + "example": "400" + } + } + }, + "errorSynchronizationNoNetworkConnection": "Synchronizing tokens failed, eduMFA 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." + }, + "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 ..." + } + } + }, + "rollingOut": "Rolling out", + "@rollingOut": { + "description": "Label that tells the user that the token is being rolled out." + }, + "unexpectedError": "An unexpected error occurred.", + "@unexpectedError": { + "description": "Title of page report mode." + }, + "pollingFailed": "Polling failed.", + "@pollingFailed": { + "description": "Tells the user that the polling failed." + }, + "pollingFailedFor": "Polling failed for {serial}", + "@pollingFailedFor": { + "description": "Tells the user that the polling failed.", + "placeholders": { + "serial": { + "example": "PUSH1234A" + } + } + }, + "noNetworkConnection": "No network connection.", + "@noNetworkConnection": { + "description": "Tells the user that there is no network connection." + }, + "connectionFailed": "Connection failed.", + "@connectionFailed": { + "description": "Tells the user that the connection failed." + }, + "checkYourNetwork": "Please check your network connection and try again.", + "@checkYourNetwork": { + "description": "Tells the user to check the network connection." + }, + "couldNotSignMessage": "Could not sign message.", + "@couldNotSignMessage": { + "description": "Tells the user that the message could not be signed." + }, + "language": "Language", + "@language": { + "description": "Title of language setting group." + }, + "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." + }, + "biometricHint": "Authentication required", + "@biometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "biometricSuccess": "Authentication successful", + "@biometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "lock": "Lock", + "@lock": { + "description": "Description of button that locks a token." + }, + "lockDescription": "Lock a token with biometric authentication.", + "@lockDescription": { + "description": "Description of the lock option when editing a token." + }, + "search": "Search", + "@search": { + "description": "Placeholder text for search bar." + }, + "noResultTitle": "No tokens stored yet.", + "@noResultTitle": { + "description": "No tokens stored yet." + }, + "noResultText1": "Tap the ", + "@noResultText1": { + "description": "first no result text" + }, + "noResultText2": " button to get started!", + "@noResultText2": { + "description": "second no result text" + }, + "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", + "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", + "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", + "deleteLockedToken": "Please authenticate to delete the locked token.", + "editLockedToken": "Please authenticate to edit the locked token.", + "retryRollout": "Retry rollout", + "generatingRSAKeyPair": "Generating RSA key pair", + "@generatingRSAKeyPair": { + "description": "Message for the rollout process" + }, + "generatingRSAKeyPairFailed": "Generating RSA key pair failed", + "@generatingRSAKeyPairFailed": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKey": "Sending public RSA key", + "@sendingRSAPublicKey": { + "description": "Message for the rollout process" + }, + "sendingRSAPublicKeyFailed": "Sending public RSA key failed", + "@sendingRSAPublicKeyFailed": { + "description": "Message for the rollout process" + }, + "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" + }, + "authToAcceptPushRequest": "Please authenticate to accept the push request.", + "authToDeclinePushRequest": "Please authenticate to decline the push request.", + "pushRequestParseError": "Push request could not be parsed.", + "errorRollOutSSLHandshakeFailed": "SSL handshake failed. Roll-out not possible.", + "@errorRollOutSSLHandshakeFailed": { + "description": "Tells the user that the roll-out failed because the SSL handshake failed." + }, + "errorWhenPullingChallenges": "An error occured when polling for challenges of {name}", + "@errorWhenPullingChallenges": { + "description": "errorWhenPullingChallenges", + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "errorRollOutNotPossibleAnymore": "Rolling out this Token is not possible anymore.", + "errorTokenExpired": "The token {name} has expired.", + "@errorTokenExpired": { + "placeholders": { + "name": { + "example": "PUSH1234A" + } + } + }, + "cameraPermissionPermanentlyDenied": "Camera permission is permanently denied. Please grant camera permission in the system settings.", + "cameraPermissionPermanentlyDeniedButton": "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?", + "licenses": "Open Source Licenses", + "@licenses": { + "description": "Button to open the licenses page" + }, + "appVersion": "App Version", + "@appVersion": { + "description": "App version info in the About page" + }, + "privacyPolicy": "Privacy policy", + "@privacyPolicy": { + "description": "Button to open the privacy policy" + }, + "website": "Website", + "@website": { + "description": "Button to open the website" + }, + "github": "GitHub", + "@github": { + "description": "Button to open the GitHub page" + }, + "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": "eduMFA" + }, + "account": { + "example": "GitHub" + } + } + } +} \ No newline at end of file From 3de69faa22c71a06d997e32402ca5f2728cb6631 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:13:14 +0100 Subject: [PATCH 29/36] New translations intl_en.arb (Portuguese, Brazilian) --- lib/l10n/intl_pt.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 3bc06b81..993a2ad9 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,5 +1,5 @@ { - "@@locale": "pt-PT", + "@@locale": "pt-BR", "accept": "Accept", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." From ba5477b4393b779911154cf4a95bd267d05d697d Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:20:13 +0100 Subject: [PATCH 30/36] New translations intl_en.arb (Spanish) --- lib/l10n/intl_es.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index f1a36ce8..54fab598 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1,5 +1,5 @@ { - "@@locale": "es-ES", + "@@locale": "es", "accept": "Aceptar", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." From 35d2f245e1b82f96d4be9c18c8a04deb5c73f0c4 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:20:25 +0100 Subject: [PATCH 31/36] New translations intl_en.arb (Portuguese) --- lib/l10n/intl_pt.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 993a2ad9..79a017bb 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,5 +1,5 @@ { - "@@locale": "pt-BR", + "@@locale": "pt", "accept": "Accept", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." From 452553d8634423ce7b42874c63404ed3dd1e1fff Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:20:26 +0100 Subject: [PATCH 32/36] New translations intl_en.arb (Serbian (Cyrillic)) --- lib/l10n/intl_sr.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index 30ff3cd5..c1c9b9ae 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -1,5 +1,5 @@ { - "@@locale": "sr", + "@@locale": "sr-Cyrl", "accept": "Accept", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." From bd06af4de7c6aa99ed02863b4d5415cda7f25d7a Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:20:28 +0100 Subject: [PATCH 33/36] New translations intl_en.arb (Swedish) --- lib/l10n/intl_sv.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index 40191d99..8d5e51bb 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -1,5 +1,5 @@ { - "@@locale": "sv-SE", + "@@locale": "sv", "accept": "Accept", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." From 7938fdf3004898c38f2d0e5651c6847612e7700f Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:20:30 +0100 Subject: [PATCH 34/36] New translations intl_en.arb (Chinese Simplified) --- lib/l10n/intl_zh.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index 0e82752b..c3cd11e0 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -1,5 +1,5 @@ { - "@@locale": "zh-TW", + "@@locale": "zh-CN", "accept": "Accept", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." From 4dbd025551375bb23a7a7037fcafc86f1bc1ba2e Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:20:31 +0100 Subject: [PATCH 35/36] New translations intl_en.arb (Chinese Traditional) --- lib/l10n/intl_zh.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index c3cd11e0..0e82752b 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -1,5 +1,5 @@ { - "@@locale": "zh-CN", + "@@locale": "zh-TW", "accept": "Accept", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user." From 9a7542839e8fa494621b7afe0e391125bcba97c1 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff <32478819+fritterhoff@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:20:34 +0100 Subject: [PATCH 36/36] New translations intl_en.arb (Portuguese, Brazilian) --- lib/l10n/intl_pt.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 79a017bb..993a2ad9 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,5 +1,5 @@ { - "@@locale": "pt", + "@@locale": "pt-BR", "accept": "Accept", "@accept": { "description": "Label for e.g. a button. Something gets accepted by the user."