translation: Make more strings translatable, and improve HTTP upload errors

This commit is contained in:
Matthew Wild 2021-12-10 16:44:18 +00:00
parent 2e565f7c3e
commit e7ea291c74
10 changed files with 754 additions and 47 deletions

View file

@ -280,17 +280,17 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
return true;
} else {
DispatchQueue.main.async {
let alert = UIAlertController(title: "Open URL", message: "What do you want to do with \(url)?", preferredStyle: .alert);
alert.addAction(UIAlertAction(title: "Open chat", style: .default, handler: { (action) in
let alert = UIAlertController(title: NSLocalizedString("Open URL", comment: "Alert title"), message: String.localizedStringWithFormat(NSLocalizedString("What do you want to do with %@?", comment: "Placeholder is xmpp: URI"), url as CVarArg), preferredStyle: .alert);
alert.addAction(UIAlertAction(title: NSLocalizedString("Open chat", comment: "Action: open a chat with a JID"), style: .default, handler: { (action) in
self.open(xmppUri: xmppUri, action: .message);
}))
alert.addAction(UIAlertAction(title: "Join room", style: .default, handler: { (action) in
alert.addAction(UIAlertAction(title: NSLocalizedString("Join group", comment: "Action: Join the supplied JID as a group"), style: .default, handler: { (action) in
self.open(xmppUri: xmppUri, action: .join);
}))
alert.addAction(UIAlertAction(title: "Add contact", style: .default, handler: { (action) in
alert.addAction(UIAlertAction(title: NSLocalizedString("Add contact", comment: "Action: add the provided JID as a new contact"), style: .default, handler: { (action) in
self.open(xmppUri: xmppUri, action: .roster);
}))
alert.addAction(UIAlertAction(title: "Nothing", style: .cancel, handler: nil));
alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, handler: nil));
self.window?.rootViewController?.present(alert, animated: true, completion: nil);
}
return false;
@ -309,7 +309,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
navController.modalPresentationStyle = .formSheet;
self.window?.rootViewController?.present(navController, animated: true, completion: nil);
case .message:
let alert = UIAlertController(title: "Start chatting", message: "Select account to open chat from", preferredStyle: .alert);
let alert = UIAlertController(title: NSLocalizedString("Start Chat", comment: "Alert title - starting a new chat"), message: NSLocalizedString("Select account to open chat from:", comment: "Shown above a choice list of the user's accounts"), preferredStyle: .alert);
let accounts = self.xmppService.getClients().map({ (client) -> BareJID in
return client.sessionObject.userBareJid!;
}).sorted { (a1, a2) -> Bool in
@ -373,8 +373,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
itemEditController?.preauth = xmppUri.dict?["preauth"];
});
case .register:
let alert = UIAlertController(title: "Registering account", message: xmppUri.jid.localPart == nil ? "Do you wish to register a new account at \(xmppUri.jid.domain!)?" : "Do you wish to register a new account \(xmppUri.jid.stringValue)?", preferredStyle: .alert);
alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { action in
let alert = UIAlertController(title: NSLocalizedString("Create Account", comment: "Alert title"), message: xmppUri.jid.localPart == nil ? String.localizedStringWithFormat(NSLocalizedString("Do you wish to register a new account at %@?", comment: "Alert text. Placeholder is server domain."), xmppUri.jid.domain!) : String.localizedStringWithFormat(NSLocalizedString("Do you wish to register the account %@?", comment: "Alert text. Placeholder is account JID."), xmppUri.jid.stringValue), preferredStyle: .alert);
alert.addAction(UIAlertAction(title: NSLocalizedString("Yes", comment: ""), style: .default, handler: { action in
let registerAccountController = RegisterAccountController.instantiate(fromAppStoryboard: .Account);
registerAccountController.hidesBottomBarWhenPushed = true;
registerAccountController.account = xmppUri.jid.bareJid;
@ -382,7 +382,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
registerAccountController.onAccountAdded = then;
self.window?.rootViewController?.showDetailViewController(UINavigationController(rootViewController: registerAccountController), sender: self);
}));
alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: nil));
alert.addAction(UIAlertAction(title: NSLocalizedString("No", comment: ""), style: .cancel, handler: nil));
self.window?.rootViewController?.present(alert, animated: true, completion: nil);
}
}

View file

@ -204,14 +204,14 @@ extension BaseChatViewController: URLSessionDelegate {
}
func showAlert(shareError: ShareError) {
self.showAlert(title: "Upload failed", message: shareError.message);
self.showAlert(title: NSLocalizedString("Upload Failed", comment: "Alert title"), message: shareError.message);
}
func showAlert(title: String, message: String) {
DispatchQueue.main.async {
self.hideProgressBar();
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert);
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil));
alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default, handler: nil));
self.present(alert, animated: true, completion: nil);
}
}
@ -235,27 +235,34 @@ enum ShareError: Error {
case notSupported
case fileTooBig
case httpError
case connectionError
case httpError(code: Int)
case invalidResponseCode(url: URL)
var message: String {
switch self {
case .invalidResponseCode:
return "Server did not confirm file upload correctly."
case .unknownError:
return "Please try again later."
return NSLocalizedString("File upload was not acknowledged by the server.", comment: "Error text")
case .noAccessError:
return "It was not possible to access the file."
return NSLocalizedString("It was not possible to access the file.", comment: "Error text: upload failed due to permissions")
case .noFileSizeError:
return "Could not retrieve file size.";
return NSLocalizedString("Could not determine file size.", comment: "Error text - while uploading file");
case .noMimeTypeError:
return "Could not detect MIME type of a file.";
return NSLocalizedString("Could not detect file type.", comment: "Error text - while uploading file");
case .notSupported:
return "Feature not supported by XMPP server";
return NSLocalizedString("File uploads are not supported on your account.", comment: "Error text - while uploading file");
case .fileTooBig:
return "File is too big to share";
case .httpError:
return "Upload to HTTP server failed.";
return NSLocalizedString("File is too large to share on your account.", comment: "Error text - while uploading file");
case .connectionError, .unknownError:
return NSLocalizedString("Check your network connection or try again later.", comment: "Error text - while uploading file")
case .httpError(let code):
if(code >= 500) {
return NSLocalizedString("There was a server error processing the file upload. Please try again later.", comment: "Error text - while uploading file")
} else if(code >= 400) {
return String.localizedStringWithFormat(NSLocalizedString("The upload was rejected by the server (error %@).", comment: "Error text - while uploading a file. Placeholder is a HTTP status code."), code)
} else {
return String.localizedStringWithFormat(NSLocalizedString("Unexpected error (%@) received while uploading file.", comment: "Error text - while uploading file. Placeholder is a HTTP status code."), code);
}
}
}
}

View file

@ -22,6 +22,9 @@
/* No comment provided by engineer. */
"Add account" = "Tilføj konto";
/* Action: add the provided JID as a new contact */
"Add contact" = "Add contact";
/* No comment provided by engineer. */
"Addresses" = "Addresses";
@ -53,6 +56,9 @@
/* Status Options */
"Away" = "Away";
/* Alert title */
"Ban Failed" = "Ban Failed";
/* No comment provided by engineer. */
"Ban user" = "Ban user";
@ -101,6 +107,9 @@
/* Status Options */
"Chat" = "Chat";
/* Error text - while uploading file */
"Check your network connection or try again later." = "Check your network connection or try again later.";
/* No comment provided by engineer. */
"Clear History" = "Clear History";
@ -119,6 +128,12 @@
/* No comment provided by engineer. */
"Could not connect to the service. Check your network connectivity or try again later." = "Could not connect to the service. Check your network connectivity or try again later.";
/* Error text - while uploading file */
"Could not detect file type." = "Could not detect file type.";
/* Error text - while uploading file */
"Could not determine file size." = "Could not determine file size.";
/* No comment provided by engineer. */
"Could not rename group chat. The server responded with an error:" = "Could not rename group chat. The server responded with an error:";
@ -128,6 +143,9 @@
/* No comment provided by engineer. */
"Create" = "Create";
/* Alert title */
"Create Account" = "Create Account";
/* App Theme Type */
"Dark" = "Dark";
@ -161,12 +179,24 @@
/* No comment provided by engineer. */
"Display" = "Display";
/* Label for text field where user can enter their preferred name to display to their contacts */
"Display Name" = "Display Name";
/* Status Options */
"Do not disturb" = "Do not disturb";
/* No comment provided by engineer. */
"Do you want to ban user" = "Do you want to ban user";
/* Confirmation prompt text */
"Do you wish to publish this photo as your profile picture?" = "Do you wish to publish this photo as your profile picture?";
/* Alert text. Placeholder is server domain. */
"Do you wish to register a new account at %@?" = "Do you wish to register a new account at %@?";
/* Alert text. Placeholder is account JID. */
"Do you wish to register the account %@?" = "Do you wish to register the account %@?";
/* Menu item: opens file picket to select document to share */
"Document" = "Document";
@ -209,12 +239,24 @@
/* Status Options */
"Extended away" = "Extended away";
/* Alert text. First placeholder is name or JID, second is error message */
"Failed to ban %@: %@" = "Failed to ban %1$@: %2$@";
/* No comment provided by engineer. */
"Failed To Update Contact List" = "Failed To Update Contact List";
/* No comment provided by engineer. */
"Failure" = "Failure";
/* Error text - while uploading file */
"File is too large to share on your account." = "File is too large to share on your account.";
/* Error text */
"File upload was not acknowledged by the server." = "File upload was not acknowledged by the server.";
/* Error text - while uploading file */
"File uploads are not supported on your account." = "File uploads are not supported on your account.";
/* No comment provided by engineer. */
"Fingerprint of this device" = "Fingerprint of this device";
@ -242,6 +284,9 @@
/* No comment provided by engineer. */
"It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera." = "It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera.";
/* Error text: upload failed due to permissions */
"It was not possible to access the file." = "It was not possible to access the file.";
/* No comment provided by engineer. */
"It was not possible to contact XMPP server and sign in." = "It was not possible to contact XMPP server and sign in.";
@ -251,6 +296,9 @@
/* No comment provided by engineer. */
"It was not possible to establish call" = "It was not possible to establish call";
/* Action: Join the supplied JID as a group */
"Join group" = "Join group";
/* No comment provided by engineer. */
"Join group chat" = "Join group chat";
@ -368,6 +416,12 @@
/* Status Options */
"Online" = "Online";
/* Action: open a chat with a JID */
"Open chat" = "Open chat";
/* Alert title */
"Open URL" = "Open URL";
/* No comment provided by engineer. */
"Operation timed out" = "Operation timed out";
@ -398,6 +452,9 @@
/* No comment provided by engineer. */
"Private message" = "Private message";
/* Alert title */
"Profile Picture Update Failed" = "Profile Picture Update Failed";
/* No comment provided by engineer. */
"Provided values are not acceptable" = "Provided values are not acceptable";
@ -467,6 +524,9 @@
/* No comment provided by engineer. */
"Search channels" = "Search channels";
/* Shown above a choice list of the user's accounts */
"Select account to open chat from:" = "Select account to open chat from:";
/* No comment provided by engineer. */
"Select photo" = "Select photo";
@ -497,9 +557,6 @@
/* No comment provided by engineer. */
"server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings." = "server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings.";
/* No comment provided by engineer. */
"Server returned an error:" = "Server returned an error:";
/* No comment provided by engineer. */
"Server returned error:" = "Server returned error:";
@ -512,6 +569,9 @@
/* Informs user to slide their finger in direction of arrow to cancel audio recording */
"Slide to cancel" = "Slide to cancel";
/* Alert title - starting a new chat */
"Start Chat" = "Start Chat";
/* No comment provided by engineer. */
"Status" = "Status";
@ -527,21 +587,36 @@
/* No comment provided by engineer. */
"The server returned an error: " = "The server returned an error: ";
/* Error text - while uploading a file. Placeholder is a HTTP status code. */
"The upload was rejected by the server (error %@)." = "The upload was rejected by the server (error %@).";
/* No comment provided by engineer. */
"The user will be reported and any calls, messages and status updates from them will be blocked." = "The user will be reported and any calls, messages and status updates from them will be blocked.";
/* Error text - while uploading file */
"There was a server error processing the file upload. Please try again later." = "There was a server error processing the file upload. Please try again later.";
/* No comment provided by engineer. */
"This will delete all the message history for this chat. Continue?" = "This will delete all the message history for this chat. Continue?";
/* Alert text */
"Unable to publish your profile picture at this time.\nError: %@" = "Unable to publish your profile picture at this time.\nError: %@";
/* No comment provided by engineer. */
"Unblock" = "Unblock";
/* Error text - while uploading file. Placeholder is a HTTP status code. */
"Unexpected error (%@) received while uploading file." = "Unexpected error (%@) received while uploading file.";
/* No comment provided by engineer. */
"Unkown error occured" = "Unkown error occured";
/* No comment provided by engineer. */
"Unlimited" = "Unlimited";
/* Alert title */
"Upload Failed" = "Upload Failed";
/* No comment provided by engineer. */
"Used image and video quality may impact storage and network usage" = "Used image and video quality may impact storage and network usage";
@ -557,6 +632,9 @@
/* No comment provided by engineer. */
"Warning" = "Warning";
/* Placeholder is xmpp: URI */
"What do you want to do with %@?" = "What do you want to do with %@?";
/* Option: only notify user when they are mentioned in this group */
"When mentioned" = "When mentioned";

View file

@ -1,8 +1,13 @@
/* Preceded by user's server domain */
" server returned an error on the request to enable push notifications. You can try to enable this feature later on from the account settings." = " server returned an error on the request to enable push notifications. You can try to enable this feature later on from the account settings.";
/* Placeholder is the MBs Download Limit */
"%d MB" = "%d MB";
/* No comment provided by engineer. */
"(private message)" = "(private Nachricht)";
/* No comment provided by engineer. */
"1 line of preview" = "Eine Vorschauzeile";
/* Alert dialog title - account is offline */
@ -10,18 +15,35 @@
/* Alert title */
"Account Removal Failed" = "Fehler beim Entfernen des Kontos";
/* No comment provided by engineer. */
"Accounts" = "Konten";
/* No comment provided by engineer. */
"Add account" = "Konto hinzufügen";
/* Action: add the provided JID as a new contact */
"Add contact" = "Add contact";
/* Section heading for a list of postal addresses */
"Addresses" = "Adressen";
/* How many messages to fetch from the server */
"All" = "Alle";
/* No comment provided by engineer. */
"All messages will be deleted and all participants will be kicked out. Are you sure?" = "Alle Nachrichten werden gelöscht und alle Teilnehmer werden entfernt. Sind Sie sicher?";
/* Option: Always notify user about messages in this group */
"Always" = "Immer";
/* No comment provided by engineer. */
"Attachment" = "Anhang";
/* No comment provided by engineer. */
"Attachments" = "Anhänge";
/* No comment provided by engineer. */
"Audio call" = "Anruf";
/* App Theme Type */
@ -33,101 +55,260 @@
/* Status Options */
"Away" = "Abwesend";
/* Alert title */
"Ban Failed" = "Ban Failed";
/* No comment provided by engineer. */
"Ban user" = "Benutzer sperren";
/* No comment provided by engineer. */
"Banning user" = "Benutzer sperren";
/* No comment provided by engineer. */
"Be right back" = "Gleich zurück";
/* Sorting Chat Messages */
"By availability and time" = "Nach Verfügbarkeit und Zeit";
/* No comment provided by engineer. */
"By name" = "Nach Name";
/* No comment provided by engineer. */
"By status" = "Nach Status";
/* Sorting Chat Messages */
"By time" = "Nach Zeit";
/* No comment provided by engineer. */
"Call ended" = "Anruf beendet";
/* No comment provided by engineer. */
"Call failed" = "Anruf fehlgeschlagen";
/* Menu item: open camera to capture media for sharing */
"Camera" = "Camera";
/* No comment provided by engineer. */
"Cancel" = "Abbrechen";
/* No comment provided by engineer. */
"Change" = "Ändern";
/* Alert title: change group chat picture */
"Change picture" = "Bild ändern";
/* Alert title: Change group chat subject */
"Change subject" = "Thema ändern";
/* No comment provided by engineer. */
"Channel destruction failed!" = "Löschung des Kanals fehlgeschlagen!";
/* Status Options */
"Chat" = "Chat";
/* Error text - while uploading file */
"Check your network connection or try again later." = "Check your network connection or try again later.";
/* No comment provided by engineer. */
"Clear History" = "Verlauf löschen";
/* No comment provided by engineer. */
"Close" = "Schließen";
/* Action button */
"Connect" = "Verbinden";
/* No comment provided by engineer. */
"Connecting..." = "Verbinde...";
/* No comment provided by engineer. */
"Continue" = "Fortsetzen";
/* No comment provided by engineer. */
"Could not connect to the service. Check your network connectivity or try again later." = "Konnte nicht mit dem Dienst verbinden. Überprüfe die Netzwerkverbindung oder versuche es später noch einmal.";
/* Error text - while uploading file */
"Could not detect file type." = "Could not detect file type.";
/* Error text - while uploading file */
"Could not determine file size." = "Could not determine file size.";
/* No comment provided by engineer. */
"Could not rename group chat. The server responded with an error:" = "Umbenennung der Gruppe fehlgeschlagen. Der Server hat folgenden Fehler gemeldet:";
/* No comment provided by engineer. */
"Could not set the group chat picture. The server responded with an error:" = "Setzen des Gruppenbildes fehlgeschlagen. Der Server hat folgenden Fehler gemeldet:";
/* No comment provided by engineer. */
"Create" = "Erstellen";
/* Alert title */
"Create Account" = "Create Account";
/* App Theme Type */
"Dark" = "Dunkel";
/* No comment provided by engineer. */
"Default" = "Standard";
/* No comment provided by engineer. */
"Delete" = "Löschen";
/* Action: Delete all downloaded files */
"Delete all" = "Alle löschen";
/* No comment provided by engineer. */
"Delete channel?" = "Kanal löschen?";
/* No comment provided by engineer. */
"Delete chat" = "Chat löschen";
/* No comment provided by engineer. */
"Delete group chat?" = "Gruppe löschen?";
/* No comment provided by engineer. */
"Delete My Account" = "Mein Konto löschen";
/* No comment provided by engineer. */
"Deleting your account will permanently log out all your devices and delete your account, profile, and associated data on %@." = "Durch das Löschen des Kontos werden alle zugehörigen Geräte permanent getrennt und das Konto, Profil und zugehörige Daten auf %@ gelöscht.";
/* No comment provided by engineer. */
"Details" = "Details";
/* Section heading: settings for how contact list entries should be displayed */
"Display" = "Anzeige";
/* Label for text field where user can enter their preferred name to display to their contacts */
"Display Name" = "Display Name";
/* Status Options */
"Do not disturb" = "Bitte nicht stören";
/* No comment provided by engineer. */
"Do you want to ban user" = "Wollen Sie den Benutzer sperren";
/* Confirmation prompt text */
"Do you wish to publish this photo as your profile picture?" = "Do you wish to publish this photo as your profile picture?";
/* Alert text. Placeholder is server domain. */
"Do you wish to register a new account at %@?" = "Do you wish to register a new account at %@?";
/* Alert text. Placeholder is account JID. */
"Do you wish to register the account %@?" = "Do you wish to register the account %@?";
/* Menu item: opens file picket to select document to share */
"Document" = "Document";
/* No comment provided by engineer. */
"Edit" = "Bearbeiten";
/* Section heading for list of contact email addresses */
"Email addresses" = "E-Mail Adressen";
/* No comment provided by engineer. */
"Enable %@" = "%@ aktivieren";
/* No comment provided by engineer. */
"Enable telephony provider?" = "Telefonieprovider aktivieren?";
/* No comment provided by engineer. */
"Encryption" = "Verschlüsselung";
/* Alert title */
"Encryption Not Supported" = "Verschlüsselung nicht unterstützt";
/* No comment provided by engineer. */
"Enter default nickname to use in chats" = "Geben Sie einen Standardanzeigenamen für Chats ein";
/* No comment provided by engineer. */
"Enter message to send to:" = "Enter message to send to:";
/* Text field prompt */
"Enter new name for group chat" = "Geben Sie einen neuen Namen für die Gruppe ein";
/* No comment provided by engineer. */
"Enter new subject for group chat" = "Geben Sie ein neues Thema für die Gruppe ein";
/* No comment provided by engineer. */
"Enter status message" = "Geben Sie eine Statusnachricht ein";
/* No comment provided by engineer. */
"Error" = "Fehler";
/* Status Options */
"Extended away" = "Länger abwesend";
/* Alert text. First placeholder is name or JID, second is error message */
"Failed to ban %@: %@" = "Failed to ban %1$@: %2$@";
/* No comment provided by engineer. */
"Failed To Update Contact List" = "Fehler beim Aktualisieren der Kontaktliste";
/* No comment provided by engineer. */
"Failure" = "Fehlschlag";
/* Error text - while uploading file */
"File is too large to share on your account." = "File is too large to share on your account.";
/* Error text */
"File upload was not acknowledged by the server." = "File upload was not acknowledged by the server.";
/* Error text - while uploading file */
"File uploads are not supported on your account." = "File uploads are not supported on your account.";
/* No comment provided by engineer. */
"Fingerprint of this device" = "Fingerabdruck dieses Gerätes";
/* No comment provided by engineer. */
"Free for chat" = "Chatfreudig";
/* Section heading: general settings about contacts */
"General" = "Allgemein";
/* Section heading for chat history controls */
"History" = "Verlauf";
/* No comment provided by engineer. */
"Info" = "Info";
/* No comment provided by engineer. */
"Invitation" = "Einladung";
/* No comment provided by engineer. */
"Invite" = "Einladen";
/* No comment provided by engineer. */
"It was not possible to access camera or microphone. Please check privacy settings" = "Zugriff auf die Kamera oder das Mikrofon war nicht möglich. Bitte prüfen Sie die Privatsphäreneinstellungen";
/* No comment provided by engineer. */
"It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera." = "Zugriff auf die Kamera fehlgeschlagen. Bitte prüfen Sie in den Privatsphäreeinstellungen, dass Snikket der Zugriff auf die Kamera erlaubt ist.";
/* Error text: upload failed due to permissions */
"It was not possible to access the file." = "It was not possible to access the file.";
/* No comment provided by engineer. */
"It was not possible to contact XMPP server and sign in." = "Verbindung mit dem XMPP-Server oder Anmeldung fehlgeschlagen.";
/* No comment provided by engineer. */
"It was not possible to destroy channel %@. Server returned an error:" = "Es war nicht möglich den Kanal %@ zu löschen. Der Server hat folgenden Fehler gemeldet:";
/* No comment provided by engineer. */
"It was not possible to establish call" = "Konnte den Anruf nicht aufbauen";
/* Action: Join the supplied JID as a group */
"Join group" = "Join group";
/* No comment provided by engineer. */
"Join group chat" = "Gruppe beitreten";
/* No comment provided by engineer. */
"Joined" = "Beigetreten";
/* No comment provided by engineer. */
"Joining..." = "Trete bei...";
/* No comment provided by engineer. */
"Key not generated!" = "Schlüssel nicht erzeugt!";
/* Placeholder is number of days */
@ -135,36 +316,74 @@
/* Placeholder is hours value */
"Last %d hours" = "Letzte %d Stunden";
/* No comment provided by engineer. */
"Leave chat" = "Chat verlassen";
/* App Theme Type */
"Light" = "Hell";
/* No comment provided by engineer. */
"Limits the size of the files sent to you which may be automatically downloaded" = "Maximale Größe für den automatischen Download von empfangenen Dateien";
/* No comment provided by engineer. */
"lines of preview" = "Vorschauzeilen";
/* No comment provided by engineer. */
"List of Messages" = "Nachrichtenliste";
/* Menu item: open location picker to share a location */
"Location" = "Location";
/* No comment provided by engineer. */
"Log Out" = "Abmelden";
/* No comment provided by engineer. */
"Login and password do not match." = "Anmeldename oder Passwort falsch.";
/* Alert title for storage usage */
"Manage Storage" = "Speicher verwalten";
/* No comment provided by engineer. */
"Media" = "Medien";
/* No comment provided by engineer. */
"Member" = "Teilnehmer:in";
/* No comment provided by engineer. */
"Message Archiving" = "Nachrichtenarchiv";
/* Alert title */
"Message Archiving Error" = "Nachrichtenarchivierungsfehler";
/* No comment provided by engineer. */
"Messages" = "Nachrichten";
/* Option: notifications from this group chat will be suppressed */
"Muted" = "Stumm gestellt";
/* No comment provided by engineer. */
"Name" = "Name";
/* No comment provided by engineer. */
"New call..." = "Neuer Anruf...";
/* No comment provided by engineer. */
"New private group chat" = "Neue private Gruppe";
/* No comment provided by engineer. */
"New public group chat" = "Neue öffentliche Gruppe";
/* No comment provided by engineer. */
"Nickname" = "Anzeigename";
/* No comment provided by engineer. */
"No" = "Nein";
/* No comment provided by engineer. */
"No attachments" = "Keine Anhänge";
/* No comment provided by engineer. */
"No messages yet. Say hi!" = "Noch keine Nachrichten. Sag Hallo!";
/* Encryption mode */
@ -172,12 +391,20 @@
/* Alert title */
"Not Connected" = "Nicht verbunden";
/* No comment provided by engineer. */
"Not connected!" = "Nicht verbunden!";
/* No comment provided by engineer. */
"Not Joined" = "Nicht beigetreten";
/* How many messages to fetch from the server */
"Nothing" = "Nichts";
/* No comment provided by engineer. */
"Offline" = "Getrennt";
/* No comment provided by engineer. */
"OK" = "OK";
/* Action: Delete all downloaded files over 7 days old */
@ -188,11 +415,29 @@
/* Status Options */
"Online" = "Online";
/* Action: open a chat with a JID */
"Open chat" = "Open chat";
/* Alert title */
"Open URL" = "Open URL";
/* No comment provided by engineer. */
"Operation timed out" = "Aktion wegen Zeitüberschreitung abgebrochen";
/* No comment provided by engineer. */
"operation timed out" = "Aktion aufgrund einer Zeitüberschreitung abgebrochen";
/* No comment provided by engineer. */
"Original quality will share image in the format in which it is stored on your phone and it may not be supported by every device." = "Bei Originalqualität wird das Bild in dem ursprünglichen Format in dem es auf dem Telefon gespeichert ist gesendet. Das wird ggfs. nicht von jedem Empfangsgerät unterstützt.";
/* No comment provided by engineer. */
"Original quality will share video in the format in which video is stored on your phone and it may not be supported by every device." = "Bei Originalqualität wird das Video in dem ursprünglichen Format in dem es auf dem Telefon gespeichert ist gesendet. Das wird ggfs. nicht von jedem Empfangsgerät unterstützt.";
/* No comment provided by engineer. */
"Other devices fingerprints" = "Fingerabdrücke anderer Geräte";
/* No comment provided by engineer. */
"Permanently Delete Account" = "Konto unwiderruflich löschen";
/* Section heading for list of contact phone numbers */
@ -200,17 +445,32 @@
/* Menu item: select media to share from photo/video library */
"Photo & Video Library" = "Photo & Video Library";
/* No comment provided by engineer. */
"Please try again!" = "Bitte nochmal versuchen!";
/* No comment provided by engineer. */
"Private message" = "Private Nachricht";
/* Alert title */
"Profile Picture Update Failed" = "Profile Picture Update Failed";
/* No comment provided by engineer. */
"Provided values are not acceptable" = "Angegebene Werte sind nicht akzeptabel";
/* Alert title */
"Push Notifications" = "Push Notifications";
/* No comment provided by engineer. */
"Push notifications are enabled for %@. They need to be disabled before account can be removed and it is not possible to at this time. Please try again later." = "Push-Nachrichten sind für %@ aktiviert. Sie müssen deaktiviert werden, bevor das Konto entfernt werden kann und dies ist aktuell nicht möglich. Bitte später noch einmal probieren.";
/* Alert title */
"Push Notifications Enabled" = "Push-Benachrichtigungen eingeschaltet";
/* No comment provided by engineer. */
"Push Notifications Error" = "Push-Benachrichtigungsfehler";
/* No comment provided by engineer. */
"Quality of shared media" = "Qualität von geteilten Medien";
/* Placeholder is the number in MBs */
@ -221,72 +481,196 @@
/* Alert title */
"Registration Failure" = "Registrierung fehlgeschlagen";
/* No comment provided by engineer. */
"Registration is not supported by this server" = "Registrierung wird von diesem Server nicht unterstützt";
/* No comment provided by engineer. */
"Remove Account Data" = "Kontodaten entfernen";
/* No comment provided by engineer. */
"Rename" = "Umbenennen";
/* Alert title
Alert title: rename a group chat */
"Rename chat" = "Chat umbenennen";
/* No comment provided by engineer. */
"Report" = "Melden";
/* No comment provided by engineer. */
"Report and Block" = "Melden und Blockieren";
/* No comment provided by engineer. */
"Report Contact" = "Kontakt melden";
/* No comment provided by engineer. */
"Reported" = "Gemeldet";
/* No comment provided by engineer. */
"Reporting..." = "Melde...";
/* No comment provided by engineer. */
"Resend" = "Erneut senden";
/* No comment provided by engineer. */
"Ringing..." = "Klingelt...";
/* No comment provided by engineer. */
"Save" = "Speichern";
/* No comment provided by engineer. */
"Scanned QR code is not valid for Snikket." = "Der gescannte QR-Code ist nicht für Snikket gültig.";
/* No comment provided by engineer. */
"Search channels" = "Kanäle suchen";
/* Shown above a choice list of the user's accounts */
"Select account to open chat from:" = "Select account to open chat from:";
/* Action button: select (existing) photo for group chat picture */
"Select photo" = "Foto auswählen";
/* No comment provided by engineer. */
"Select quality of the image to use for sharing" = "Auswahl der Bildqualität zum Teilen";
/* No comment provided by engineer. */
"Select quality of the video to use for sharing" = "Auswahl der Videoqualität zum Teilen";
/* No comment provided by engineer. */
"Select status" = "Status festlegen";
/* No comment provided by engineer. */
"Send" = "Senden";
/* Action button: share with chat this device's current location */
"Send Current Location" = "Aktuelle Position senden";
/* No comment provided by engineer. */
"Send message" = "Nachricht senden";
/* Action button: share with chat the location of the pin dropped by the user on the map (as opposed to device current location) */
"Send Pin Location" = "Gewählte Position senden";
/* No comment provided by engineer. */
"Server did not respond to registration request" = "Der Server hat auf die Registrierungsanfrage nicht geantwortet";
/* Preceded by user's server domain */
"server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings." = "server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings.";
"Server returned an error:" = "Der Server hat folgenden Fehler zurückgegeben:";
/* No comment provided by engineer. */
"Server returned error:" = "Der Server hat folgenden Fehler zurückgegeben:";
/* No comment provided by engineer. */
"Set" = "Setzen";
/* No comment provided by engineer. */
"Settings" = "Einstellungen";
/* Informs user to slide their finger in direction of arrow to cancel audio recording */
"Slide to cancel" = "Slide to cancel";
/* Alert title - starting a new chat */
"Start Chat" = "Start Chat";
/* No comment provided by engineer. */
"Status" = "Status";
/* No comment provided by engineer. */
"Successfully registered to receive push notifications." = "Erfolgreich für Push-Benachrichtigungen registriert.";
/* Action button: take a new photo to use to as group chat picture */
"Take photo" = "Foto machen";
/* followed by a space and error condition */
"The server returned an error:" = "Der Server hat folgenden Fehler zurückgegeben:";
/* No comment provided by engineer. */
"The server returned an error: " = "Der Server hat folgenden Fehler zurückgegeben: ";
/* Error text - while uploading a file. Placeholder is a HTTP status code. */
"The upload was rejected by the server (error %@)." = "The upload was rejected by the server (error %@).";
/* No comment provided by engineer. */
"The user will be reported and any calls, messages and status updates from them will be blocked." = "Benutzer:in wird gemeldet und alle Anrufe, Nachrichten und Statusinformationen werden blockiert.";
/* Error text - while uploading file */
"There was a server error processing the file upload. Please try again later." = "There was a server error processing the file upload. Please try again later.";
/* No comment provided by engineer. */
"This will delete all the message history for this chat. Continue?" = "Diese Aktion wird den kompletten Nachrichtenverlauf für diesen Chat löschen. Fortfahren?";
/* Alert text */
"Unable to publish your profile picture at this time.\nError: %@" = "Unable to publish your profile picture at this time.\nError: %@";
/* No comment provided by engineer. */
"Unblock" = "Entblocken";
/* Error text - while uploading file. Placeholder is a HTTP status code. */
"Unexpected error (%@) received while uploading file." = "Unexpected error (%@) received while uploading file.";
/* No comment provided by engineer. */
"Unkown error occured" = "Es ist ein unbekanter Fehler aufgetreten";
/* No comment provided by engineer. */
"Unlimited" = "Unbegrenzt";
/* Alert title */
"Upload Failed" = "Upload Failed";
/* No comment provided by engineer. */
"Used image and video quality may impact storage and network usage" = "Die gewählte Bild- und Videoqualität kann Speicherplatz und Datenverbrauch beeinflussen";
/* No comment provided by engineer. */
"User with provided username already exists" = "Es existiert bereits ein Benutzer mit dem gewählten Namen";
/* followed by account name to select */
"using" = "verwende";
/* No comment provided by engineer. */
"Video call" = "Videoanruf";
/* No comment provided by engineer. */
"Warning" = "Warnung";
/* Placeholder is xmpp: URI */
"What do you want to do with %@?" = "What do you want to do with %@?";
/* Option: only notify user when they are mentioned in this group */
"When mentioned" = "Wenn erwähnt";
/* No comment provided by engineer. */
"Would you like to use %@ as the default provider for outgoing SMS and calls from %@?" = "Möchtest du %@ als Standardprovider für ausgehende SMS und Anrufe von %@ verwenden?";
/* No comment provided by engineer. */
"Yes" = "Ja";
/* No comment provided by engineer. */
"Yesterday" = "Gestern";
/* No comment provided by engineer. */
"You are invited to join conversation at" = "You are invited to join conversation at";
/* No comment provided by engineer. */
"You are leaving the group chat" = "You are leaving the group chat";
/* Alert text */
"You are not currently connected to this group. Please check your network connection and try again later." = "Du bist im Moment nicht zu dieser Gruppe verbunden. Bitte überprüfe die Netzwerkverbindung und versuche es später nochmal.";
/* No comment provided by engineer. */
"You are not joined to the channel." = "Du bist diesem Kanal nicht beigetreten.";
/* No comment provided by engineer. */
"You can log out of this account temporarily, or permanently remove all account data from this device (including chats). Account removal cannot be undone." = "Du kannst das Konto temporär trennen oder unwiderruflich alle Kontodaten von diesem Gerät entfernen, inkusive Chatverläufen.";
/* No comment provided by engineer. */
"You have enabled encryption, but this group does not support encrypted messages. Please change encryption settings to be able to send messages." = "Du hast Verschlüsselung aktiviert, aber diese Gruppe unterstützt keine verschlüsselten Nachrichten. Bitte ändere die Verschlüsselungseinstellungen um Nachrichten senden zu können.";
/* No comment provided by engineer. */
"You need to connect to your account before you can update your contact list. Do you wish to connect now?" = "Du musst das Konto verbinden bevor die Kontaktliste geändert werden kann. Soll das Konto jetzt verbunden werden?";
/* Placeholder is the Group Name */
"You've left the group %@ and notifications for this group have been disabled.\nYou may need to reenable them on other devices." = "Du hast die Gruppe %@ verlassen und Benachrichtigungen für die Gruppe wurden deaktiviert.\nEventuell müssen die Benachrichtigungen auf anderen Geräten wieder eingeschaltet werden.";
/* No comment provided by engineer. */
"Your Name" = "Dein Name";

View file

@ -22,6 +22,9 @@
/* No comment provided by engineer. */
"Add account" = "Add account";
/* Action: add the provided JID as a new contact */
"Add contact" = "Add contact";
/* No comment provided by engineer. */
"Addresses" = "Addresses";
@ -53,6 +56,9 @@
/* Status Options */
"Away" = "Away";
/* Alert title */
"Ban Failed" = "Ban Failed";
/* No comment provided by engineer. */
"Ban user" = "Ban user";
@ -101,6 +107,9 @@
/* Status Options */
"Chat" = "Chat";
/* Error text - while uploading file */
"Check your network connection or try again later." = "Check your network connection or try again later.";
/* No comment provided by engineer. */
"Clear History" = "Clear History";
@ -119,6 +128,12 @@
/* No comment provided by engineer. */
"Could not connect to the service. Check your network connectivity or try again later." = "Could not connect to the service. Check your network connectivity or try again later.";
/* Error text - while uploading file */
"Could not detect file type." = "Could not detect file type.";
/* Error text - while uploading file */
"Could not determine file size." = "Could not determine file size.";
/* No comment provided by engineer. */
"Could not rename group chat. The server responded with an error:" = "Could not rename group chat. The server responded with an error:";
@ -128,6 +143,9 @@
/* No comment provided by engineer. */
"Create" = "Create";
/* Alert title */
"Create Account" = "Create Account";
/* App Theme Type */
"Dark" = "Dark";
@ -161,12 +179,24 @@
/* No comment provided by engineer. */
"Display" = "Display";
/* Label for text field where user can enter their preferred name to display to their contacts */
"Display Name" = "Display Name";
/* Status Options */
"Do not disturb" = "Do not disturb";
/* No comment provided by engineer. */
"Do you want to ban user" = "Do you want to ban user";
/* Confirmation prompt text */
"Do you wish to publish this photo as your profile picture?" = "Do you wish to publish this photo as your profile picture?";
/* Alert text. Placeholder is server domain. */
"Do you wish to register a new account at %@?" = "Do you wish to register a new account at %@?";
/* Alert text. Placeholder is account JID. */
"Do you wish to register the account %@?" = "Do you wish to register the account %@?";
/* Menu item: opens file picket to select document to share */
"Document" = "Document";
@ -209,12 +239,24 @@
/* Status Options */
"Extended away" = "Extended away";
/* Alert text. First placeholder is name or JID, second is error message */
"Failed to ban %@: %@" = "Failed to ban %1$@: %2$@";
/* No comment provided by engineer. */
"Failed To Update Contact List" = "Failed To Update Contact List";
/* No comment provided by engineer. */
"Failure" = "Failure";
/* Error text - while uploading file */
"File is too large to share on your account." = "File is too large to share on your account.";
/* Error text */
"File upload was not acknowledged by the server." = "File upload was not acknowledged by the server.";
/* Error text - while uploading file */
"File uploads are not supported on your account." = "File uploads are not supported on your account.";
/* No comment provided by engineer. */
"Fingerprint of this device" = "Fingerprint of this device";
@ -242,6 +284,9 @@
/* No comment provided by engineer. */
"It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera." = "It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera.";
/* Error text: upload failed due to permissions */
"It was not possible to access the file." = "It was not possible to access the file.";
/* No comment provided by engineer. */
"It was not possible to contact XMPP server and sign in." = "It was not possible to contact XMPP server and sign in.";
@ -251,6 +296,9 @@
/* No comment provided by engineer. */
"It was not possible to establish call" = "It was not possible to establish call";
/* Action: Join the supplied JID as a group */
"Join group" = "Join group";
/* No comment provided by engineer. */
"Join group chat" = "Join group chat";
@ -368,6 +416,12 @@
/* Status Options */
"Online" = "Online";
/* Action: open a chat with a JID */
"Open chat" = "Open chat";
/* Alert title */
"Open URL" = "Open URL";
/* No comment provided by engineer. */
"Operation timed out" = "Operation timed out";
@ -398,6 +452,9 @@
/* No comment provided by engineer. */
"Private message" = "Private message";
/* Alert title */
"Profile Picture Update Failed" = "Profile Picture Update Failed";
/* No comment provided by engineer. */
"Provided values are not acceptable" = "Provided values are not acceptable";
@ -467,6 +524,9 @@
/* No comment provided by engineer. */
"Search channels" = "Search channels";
/* Shown above a choice list of the user's accounts */
"Select account to open chat from:" = "Select account to open chat from:";
/* No comment provided by engineer. */
"Select photo" = "Select photo";
@ -497,9 +557,6 @@
/* No comment provided by engineer. */
"server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings." = "server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings.";
/* No comment provided by engineer. */
"Server returned an error:" = "Server returned an error:";
/* No comment provided by engineer. */
"Server returned error:" = "Server returned error:";
@ -512,6 +569,9 @@
/* Informs user to slide their finger in direction of arrow to cancel audio recording */
"Slide to cancel" = "Slide to cancel";
/* Alert title - starting a new chat */
"Start Chat" = "Start Chat";
/* No comment provided by engineer. */
"Status" = "Status";
@ -527,21 +587,36 @@
/* No comment provided by engineer. */
"The server returned an error: " = "The server returned an error: ";
/* Error text - while uploading a file. Placeholder is a HTTP status code. */
"The upload was rejected by the server (error %@)." = "The upload was rejected by the server (error %@).";
/* No comment provided by engineer. */
"The user will be reported and any calls, messages and status updates from them will be blocked." = "The user will be reported and any calls, messages and status updates from them will be blocked.";
/* Error text - while uploading file */
"There was a server error processing the file upload. Please try again later." = "There was a server error processing the file upload. Please try again later.";
/* No comment provided by engineer. */
"This will delete all the message history for this chat. Continue?" = "This will delete all the message history for this chat. Continue?";
/* Alert text */
"Unable to publish your profile picture at this time.\nError: %@" = "Unable to publish your profile picture at this time.\nError: %@";
/* No comment provided by engineer. */
"Unblock" = "Unblock";
/* Error text - while uploading file. Placeholder is a HTTP status code. */
"Unexpected error (%@) received while uploading file." = "Unexpected error (%@) received while uploading file.";
/* No comment provided by engineer. */
"Unkown error occured" = "Unkown error occured";
/* No comment provided by engineer. */
"Unlimited" = "Unlimited";
/* Alert title */
"Upload Failed" = "Upload Failed";
/* No comment provided by engineer. */
"Used image and video quality may impact storage and network usage" = "Used image and video quality may impact storage and network usage";
@ -557,6 +632,9 @@
/* No comment provided by engineer. */
"Warning" = "Warning";
/* Placeholder is xmpp: URI */
"What do you want to do with %@?" = "What do you want to do with %@?";
/* Option: only notify user when they are mentioned in this group */
"When mentioned" = "When mentioned";

View file

@ -22,6 +22,9 @@
/* No comment provided by engineer. */
"Add account" = "Add account";
/* Action: add the provided JID as a new contact */
"Add contact" = "Add contact";
/* No comment provided by engineer. */
"Addresses" = "Addresses";
@ -53,6 +56,9 @@
/* Status Options */
"Away" = "Away";
/* Alert title */
"Ban Failed" = "Ban Failed";
/* No comment provided by engineer. */
"Ban user" = "Ban user";
@ -101,6 +107,9 @@
/* Status Options */
"Chat" = "Chat";
/* Error text - while uploading file */
"Check your network connection or try again later." = "Check your network connection or try again later.";
/* No comment provided by engineer. */
"Clear History" = "Clear History";
@ -119,6 +128,12 @@
/* No comment provided by engineer. */
"Could not connect to the service. Check your network connectivity or try again later." = "Could not connect to the service. Check your network connectivity or try again later.";
/* Error text - while uploading file */
"Could not detect file type." = "Could not detect file type.";
/* Error text - while uploading file */
"Could not determine file size." = "Could not determine file size.";
/* No comment provided by engineer. */
"Could not rename group chat. The server responded with an error:" = "Could not rename group chat. The server responded with an error:";
@ -128,6 +143,9 @@
/* No comment provided by engineer. */
"Create" = "Create";
/* Alert title */
"Create Account" = "Create Account";
/* App Theme Type */
"Dark" = "Dark";
@ -161,12 +179,24 @@
/* No comment provided by engineer. */
"Display" = "Display";
/* Label for text field where user can enter their preferred name to display to their contacts */
"Display Name" = "Display Name";
/* Status Options */
"Do not disturb" = "Do not disturb";
/* No comment provided by engineer. */
"Do you want to ban user" = "Do you want to ban user";
/* Confirmation prompt text */
"Do you wish to publish this photo as your profile picture?" = "Do you wish to publish this photo as your profile picture?";
/* Alert text. Placeholder is server domain. */
"Do you wish to register a new account at %@?" = "Do you wish to register a new account at %@?";
/* Alert text. Placeholder is account JID. */
"Do you wish to register the account %@?" = "Do you wish to register the account %@?";
/* Menu item: opens file picket to select document to share */
"Document" = "Document";
@ -209,12 +239,24 @@
/* Status Options */
"Extended away" = "Extended away";
/* Alert text. First placeholder is name or JID, second is error message */
"Failed to ban %@: %@" = "Failed to ban %1$@: %2$@";
/* No comment provided by engineer. */
"Failed To Update Contact List" = "Failed To Update Contact List";
/* No comment provided by engineer. */
"Failure" = "Failure";
/* Error text - while uploading file */
"File is too large to share on your account." = "File is too large to share on your account.";
/* Error text */
"File upload was not acknowledged by the server." = "File upload was not acknowledged by the server.";
/* Error text - while uploading file */
"File uploads are not supported on your account." = "File uploads are not supported on your account.";
/* No comment provided by engineer. */
"Fingerprint of this device" = "Fingerprint of this device";
@ -242,6 +284,9 @@
/* No comment provided by engineer. */
"It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera." = "It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera.";
/* Error text: upload failed due to permissions */
"It was not possible to access the file." = "It was not possible to access the file.";
/* No comment provided by engineer. */
"It was not possible to contact XMPP server and sign in." = "It was not possible to contact XMPP server and sign in.";
@ -251,6 +296,9 @@
/* No comment provided by engineer. */
"It was not possible to establish call" = "It was not possible to establish call";
/* Action: Join the supplied JID as a group */
"Join group" = "Join group";
/* No comment provided by engineer. */
"Join group chat" = "Join group chat";
@ -368,6 +416,12 @@
/* Status Options */
"Online" = "Online";
/* Action: open a chat with a JID */
"Open chat" = "Open chat";
/* Alert title */
"Open URL" = "Open URL";
/* No comment provided by engineer. */
"Operation timed out" = "Operation timed out";
@ -398,6 +452,9 @@
/* No comment provided by engineer. */
"Private message" = "Private message";
/* Alert title */
"Profile Picture Update Failed" = "Profile Picture Update Failed";
/* No comment provided by engineer. */
"Provided values are not acceptable" = "Provided values are not acceptable";
@ -467,6 +524,9 @@
/* No comment provided by engineer. */
"Search channels" = "Search channels";
/* Shown above a choice list of the user's accounts */
"Select account to open chat from:" = "Select account to open chat from:";
/* No comment provided by engineer. */
"Select photo" = "Select photo";
@ -497,9 +557,6 @@
/* No comment provided by engineer. */
"server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings." = "server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings.";
/* No comment provided by engineer. */
"Server returned an error:" = "Server returned an error:";
/* No comment provided by engineer. */
"Server returned error:" = "Server returned error:";
@ -512,6 +569,9 @@
/* Informs user to slide their finger in direction of arrow to cancel audio recording */
"Slide to cancel" = "Slide to cancel";
/* Alert title - starting a new chat */
"Start Chat" = "Start Chat";
/* No comment provided by engineer. */
"Status" = "Status";
@ -527,21 +587,36 @@
/* No comment provided by engineer. */
"The server returned an error: " = "The server returned an error: ";
/* Error text - while uploading a file. Placeholder is a HTTP status code. */
"The upload was rejected by the server (error %@)." = "The upload was rejected by the server (error %@).";
/* No comment provided by engineer. */
"The user will be reported and any calls, messages and status updates from them will be blocked." = "The user will be reported and any calls, messages and status updates from them will be blocked.";
/* Error text - while uploading file */
"There was a server error processing the file upload. Please try again later." = "There was a server error processing the file upload. Please try again later.";
/* No comment provided by engineer. */
"This will delete all the message history for this chat. Continue?" = "This will delete all the message history for this chat. Continue?";
/* Alert text */
"Unable to publish your profile picture at this time.\nError: %@" = "Unable to publish your profile picture at this time.\nError: %@";
/* No comment provided by engineer. */
"Unblock" = "Unblock";
/* Error text - while uploading file. Placeholder is a HTTP status code. */
"Unexpected error (%@) received while uploading file." = "Unexpected error (%@) received while uploading file.";
/* No comment provided by engineer. */
"Unkown error occured" = "Unkown error occured";
/* No comment provided by engineer. */
"Unlimited" = "Unlimited";
/* Alert title */
"Upload Failed" = "Upload Failed";
/* No comment provided by engineer. */
"Used image and video quality may impact storage and network usage" = "Used image and video quality may impact storage and network usage";
@ -557,6 +632,9 @@
/* No comment provided by engineer. */
"Warning" = "Warning";
/* Placeholder is xmpp: URI */
"What do you want to do with %@?" = "What do you want to do with %@?";
/* Option: only notify user when they are mentioned in this group */
"When mentioned" = "When mentioned";

View file

@ -197,7 +197,7 @@ class MucChatOccupantsTableViewController: UITableViewController {
guard let err = error else {
return;
}
let alert = UIAlertController(title: "Banning user \(participant.nickname ?? participant.jid.stringValue) failed", message: NSLocalizedString("Server returned an error:",comment: "") + " \(err.rawValue)", preferredStyle: .alert);
let alert = UIAlertController(title: NSLocalizedString("Ban Failed", comment: "Alert title"), message: String.localizedStringWithFormat(NSLocalizedString("Failed to ban %@: %@",comment: "Alert text. First placeholder is name or JID, second is error message"), participant.nickname ?? participant.jid.stringValue, err.rawValue), preferredStyle: .alert);
alert.addAction(UIAlertAction(title: NSLocalizedString("OK",comment: ""), style: .cancel, handler: nil));
self.present(alert, animated: true, completion: nil);
})

View file

@ -22,6 +22,9 @@
/* No comment provided by engineer. */
"Add account" = "Add account";
/* Action: add the provided JID as a new contact */
"Add contact" = "Add contact";
/* Section heading for a list of postal addresses */
"Addresses" = "Adresser";
@ -53,6 +56,9 @@
/* Status Options */
"Away" = "Borta";
/* Alert title */
"Ban Failed" = "Ban Failed";
/* No comment provided by engineer. */
"Ban user" = "Ban user";
@ -101,6 +107,9 @@
/* Status Options */
"Chat" = "Chat";
/* Error text - while uploading file */
"Check your network connection or try again later." = "Check your network connection or try again later.";
/* No comment provided by engineer. */
"Clear History" = "Rensa historik";
@ -119,6 +128,12 @@
/* No comment provided by engineer. */
"Could not connect to the service. Check your network connectivity or try again later." = "Kunde inte ansluta till tjänsten. Kontrollera din nätverksanslutning eller försök igen senare.";
/* Error text - while uploading file */
"Could not detect file type." = "Could not detect file type.";
/* Error text - while uploading file */
"Could not determine file size." = "Could not determine file size.";
/* No comment provided by engineer. */
"Could not rename group chat. The server responded with an error:" = "Kunde inte döpa om chatt.Servern svarade med ett felmeddelande:";
@ -128,6 +143,9 @@
/* No comment provided by engineer. */
"Create" = "Skapa";
/* Alert title */
"Create Account" = "Create Account";
/* App Theme Type */
"Dark" = "Mörk";
@ -161,12 +179,24 @@
/* Section heading: settings for how contact list entries should be displayed */
"Display" = "Display";
/* Label for text field where user can enter their preferred name to display to their contacts */
"Display Name" = "Display Name";
/* Status Options */
"Do not disturb" = "Stör ej";
/* No comment provided by engineer. */
"Do you want to ban user" = "Vill du porta användaren";
/* Confirmation prompt text */
"Do you wish to publish this photo as your profile picture?" = "Do you wish to publish this photo as your profile picture?";
/* Alert text. Placeholder is server domain. */
"Do you wish to register a new account at %@?" = "Do you wish to register a new account at %@?";
/* Alert text. Placeholder is account JID. */
"Do you wish to register the account %@?" = "Do you wish to register the account %@?";
/* Menu item: opens file picket to select document to share */
"Document" = "Document";
@ -209,12 +239,24 @@
/* Status Options */
"Extended away" = "Borta en längre stund";
/* Alert text. First placeholder is name or JID, second is error message */
"Failed to ban %@: %@" = "Failed to ban %1$@: %2$@";
/* No comment provided by engineer. */
"Failed To Update Contact List" = "Misslyckades att uppdatera kontaktlistan";
/* No comment provided by engineer. */
"Failure" = "Fel";
/* Error text - while uploading file */
"File is too large to share on your account." = "File is too large to share on your account.";
/* Error text */
"File upload was not acknowledged by the server." = "File upload was not acknowledged by the server.";
/* Error text - while uploading file */
"File uploads are not supported on your account." = "File uploads are not supported on your account.";
/* No comment provided by engineer. */
"Fingerprint of this device" = "Den här enhetens fingeravtryck";
@ -242,6 +284,9 @@
/* No comment provided by engineer. */
"It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera." = "It was not possible to access camera. Please check in privacy settings that you have granted Snikket access to the camera.";
/* Error text: upload failed due to permissions */
"It was not possible to access the file." = "It was not possible to access the file.";
/* No comment provided by engineer. */
"It was not possible to contact XMPP server and sign in." = "Det gick inte kontakta XMPP-servern för att logga in.";
@ -251,6 +296,9 @@
/* No comment provided by engineer. */
"It was not possible to establish call" = "Kunde inte etablera samtal";
/* Action: Join the supplied JID as a group */
"Join group" = "Join group";
/* No comment provided by engineer. */
"Join group chat" = "Gå med i gruppchatt";
@ -368,6 +416,12 @@
/* Status Options */
"Online" = "Online";
/* Action: open a chat with a JID */
"Open chat" = "Open chat";
/* Alert title */
"Open URL" = "Open URL";
/* No comment provided by engineer. */
"Operation timed out" = "Operationen fick time out";
@ -398,6 +452,9 @@
/* No comment provided by engineer. */
"Private message" = "Private message";
/* Alert title */
"Profile Picture Update Failed" = "Profile Picture Update Failed";
/* No comment provided by engineer. */
"Provided values are not acceptable" = "Oacceptabla värden angivna";
@ -468,6 +525,9 @@
/* No comment provided by engineer. */
"Search channels" = "Sök efter kanaler";
/* Shown above a choice list of the user's accounts */
"Select account to open chat from:" = "Select account to open chat from:";
/* Action button: select (existing) photo for group chat picture */
"Select photo" = "Välj foto";
@ -498,9 +558,6 @@
/* Preceded by user's server domain */
"server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings." = "server returned an error on the request to enable archiving. You can try to enable this feature later on from the account settings.";
/* No comment provided by engineer. */
"Server returned an error:" = "Serverns felmeddelande:";
/* No comment provided by engineer. */
"Server returned error:" = "Serverns felmeddelande:";
@ -513,6 +570,9 @@
/* Informs user to slide their finger in direction of arrow to cancel audio recording */
"Slide to cancel" = "Slide to cancel";
/* Alert title - starting a new chat */
"Start Chat" = "Start Chat";
/* No comment provided by engineer. */
"Status" = "Status";
@ -528,21 +588,36 @@
/* No comment provided by engineer. */
"The server returned an error: " = "Serverns felmeddelande: ";
/* Error text - while uploading a file. Placeholder is a HTTP status code. */
"The upload was rejected by the server (error %@)." = "The upload was rejected by the server (error %@).";
/* No comment provided by engineer. */
"The user will be reported and any calls, messages and status updates from them will be blocked." = "Användaren kommer rapporteras och samtal, meddelanden och statusuppdateringar från dem blockeras.";
/* Error text - while uploading file */
"There was a server error processing the file upload. Please try again later." = "There was a server error processing the file upload. Please try again later.";
/* No comment provided by engineer. */
"This will delete all the message history for this chat. Continue?" = "Detta raderar all meddelandehistorik för den här chatten. Fortsätta?";
/* Alert text */
"Unable to publish your profile picture at this time.\nError: %@" = "Unable to publish your profile picture at this time.\nError: %@";
/* No comment provided by engineer. */
"Unblock" = "Avblockera";
/* Error text - while uploading file. Placeholder is a HTTP status code. */
"Unexpected error (%@) received while uploading file." = "Unexpected error (%@) received while uploading file.";
/* No comment provided by engineer. */
"Unkown error occured" = "Okänt fel uppstod";
/* No comment provided by engineer. */
"Unlimited" = "Obegränsad";
/* Alert title */
"Upload Failed" = "Upload Failed";
/* No comment provided by engineer. */
"Used image and video quality may impact storage and network usage" = "Vald bild- och videokvalité kan påverka lagring och dataanvändning";
@ -558,6 +633,9 @@
/* No comment provided by engineer. */
"Warning" = "Varning";
/* Placeholder is xmpp: URI */
"What do you want to do with %@?" = "What do you want to do with %@?";
/* Option: only notify user when they are mentioned in this group */
"When mentioned" = "Vid omnämnande";

View file

@ -60,10 +60,14 @@ class HTTPFileUploadHelper {
request.addValue(mimeType, forHTTPHeaderField: "Content-Type");
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: delegate, delegateQueue: OperationQueue.main);
session.dataTask(with: request) { (data, response, error) in
let code = (response as? HTTPURLResponse)?.statusCode ?? 500;
let code = (response as? HTTPURLResponse)?.statusCode ?? 0;
guard error == nil && (code == 200 || code == 201) else {
print("error:", error as Any, "response:", response as Any)
completionHandler(.failure(.httpError));
if(code == 0) {
completionHandler(.failure(.connectionError));
} else {
completionHandler(.failure(.httpError(code: code)));
}
return;
}
if code == 200 {

View file

@ -97,7 +97,7 @@ class VCardEditViewController: UITableViewController, UIImagePickerControllerDel
case 0:
return nil
case 1:
return "Display Name"
return NSLocalizedString("Display Name", comment: "Label for text field where user can enter their preferred name to display to their contacts")
default:
return nil
}
@ -137,13 +137,13 @@ class VCardEditViewController: UITableViewController, UIImagePickerControllerDel
@objc func photoClicked() {
if UIImagePickerController.isSourceTypeAvailable(.camera) {
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet);
alert.addAction(UIAlertAction(title: "Take photo", style: .default, handler: { (action) in
alert.addAction(UIAlertAction(title: NSLocalizedString("Take photo", comment: "Action: take a photo to use as a profile picture"), style: .default, handler: { (action) in
self.selectPhoto(.camera);
}));
alert.addAction(UIAlertAction(title: "Select photo", style: .default, handler: { (action) in
alert.addAction(UIAlertAction(title: NSLocalizedString("Select photo", comment: "Action: open file picker to select a photo to use as a profile picture"), style: .default, handler: { (action) in
self.selectPhoto(.photoLibrary);
}));
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil));
alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, handler: nil));
let cell = self.tableView(tableView, cellForRowAt: IndexPath(row: 0, section: 0)) as! VCardAvatarEditCell;
alert.popoverPresentationController?.sourceView = cell.avatarView;
alert.popoverPresentationController?.sourceRect = cell.avatarView!.bounds;
@ -214,9 +214,9 @@ class VCardEditViewController: UITableViewController, UIImagePickerControllerDel
if let pepUserAvatarModule:PEPUserAvatarModule = client.modulesManager.getModule(PEPUserAvatarModule.ID) {
if pepUserAvatarModule.isPepAvailable {
let question = UIAlertController(title: nil, message: "Do you wish to publish this photo as avatar?", preferredStyle: .actionSheet)
let question = UIAlertController(title: nil, message: NSLocalizedString("Do you wish to publish this photo as your profile picture?", comment: "Confirmation prompt text"), preferredStyle: .actionSheet)
question.addAction(UIAlertAction(title: "Yes", style: .default, handler: { (action) in
question.addAction(UIAlertAction(title: NSLocalizedString("Yes", comment: ""), style: .default, handler: { (action) in
pepUserAvatarModule.publishAvatar(data: data, mimeType: "image/png", onSuccess: {
@ -225,8 +225,8 @@ class VCardEditViewController: UITableViewController, UIImagePickerControllerDel
}, onError: { (errorCondition, pubsubErrorCondition) in
DispatchQueue.main.async {
let alert = UIAlertController(title: "Error", message: "User avatar publication failed.\nReason: " + ((pubsubErrorCondition?.rawValue ?? errorCondition?.rawValue) ?? "unknown"), preferredStyle: .alert);
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: {action in
let alert = UIAlertController(title: NSLocalizedString("Profile Picture Update Failed", comment: "Alert title"), message: String.localizedStringWithFormat(NSLocalizedString("Unable to publish your profile picture at this time.\nError: %@", comment:"Alert text"), ((pubsubErrorCondition?.rawValue ?? errorCondition?.rawValue) ?? "unknown")), preferredStyle: .alert);
alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, handler: {action in
self.showAvatarSpinner(show: false)
}));
@ -235,7 +235,7 @@ class VCardEditViewController: UITableViewController, UIImagePickerControllerDel
print("PEP: user avatar publication failed", errorCondition ?? "nil", pubsubErrorCondition ?? "nil");
})
}));
question.addAction(UIAlertAction(title: "No", style: .cancel, handler: { action in
question.addAction(UIAlertAction(title: NSLocalizedString("No", comment: ""), style: .cancel, handler: { action in
self.showAvatarSpinner(show: false)
}));