Эх сурвалжийг харах

Merge pull request #726 from deltachat/search-empty-state

Search: show empty state banner
cyBerta 5 жил өмнө
parent
commit
c5d6b2cbc5
33 өөрчлөгдсөн 263 нэмэгдсэн , 134 устгасан
  1. 28 1
      deltachat-ios/Controller/ChatListController.swift
  2. 34 1
      deltachat-ios/Controller/GroupMembersViewController.swift
  3. 33 2
      deltachat-ios/Controller/NewChatViewController.swift
  4. 9 1
      deltachat-ios/ViewModel/ChatListViewModel.swift
  5. 4 4
      deltachat-ios/az.lproj/Localizable.strings
  6. 4 4
      deltachat-ios/ca.lproj/Localizable.strings
  7. 4 4
      deltachat-ios/da.lproj/Localizable.strings
  8. 4 6
      deltachat-ios/de.lproj/Localizable.strings
  9. 6 5
      deltachat-ios/en.lproj/Localizable.strings
  10. 1 1
      deltachat-ios/eo.lproj/Localizable.strings
  11. 4 6
      deltachat-ios/es.lproj/Localizable.strings
  12. 15 4
      deltachat-ios/eu.lproj/Localizable.strings
  13. 4 4
      deltachat-ios/fr.lproj/Localizable.strings
  14. 9 8
      deltachat-ios/gl.lproj/Localizable.strings
  15. 1 1
      deltachat-ios/hr.lproj/Localizable.strings
  16. 1 1
      deltachat-ios/hu.lproj/Localizable.strings
  17. 4 4
      deltachat-ios/id.lproj/Localizable.strings
  18. 18 17
      deltachat-ios/it.lproj/Localizable.strings
  19. 1 1
      deltachat-ios/it.lproj/Localizable.stringsdict
  20. 1 1
      deltachat-ios/ja.lproj/Localizable.strings
  21. 2 2
      deltachat-ios/lt.lproj/Localizable.strings
  22. 5 4
      deltachat-ios/nl.lproj/Localizable.strings
  23. 4 4
      deltachat-ios/pl.lproj/Localizable.strings
  24. 4 4
      deltachat-ios/pt-BR.lproj/Localizable.strings
  25. 4 4
      deltachat-ios/pt-PT.lproj/Localizable.strings
  26. 6 5
      deltachat-ios/ru.lproj/Localizable.strings
  27. 5 4
      deltachat-ios/sq.lproj/Localizable.strings
  28. 9 8
      deltachat-ios/sv.lproj/Localizable.strings
  29. 6 5
      deltachat-ios/tr.lproj/Localizable.strings
  30. 4 4
      deltachat-ios/uk.lproj/Localizable.strings
  31. 3 3
      deltachat-ios/zh-Hant-TW.lproj/Localizable.strings
  32. 10 4
      deltachat-ios/zh-Hant.lproj/Localizable.strings
  33. 16 7
      tools/convertTranslations.js

+ 28 - 1
deltachat-ios/Controller/ChatListController.swift

@@ -33,6 +33,12 @@ class ChatListController: UITableViewController {
         return button
     }()
 
+    private lazy var emptySearchStateLabel: EmptyStateLabel = {
+        let label = EmptyStateLabel()
+        label.isHidden = false
+        return label
+    }()
+
     func getArchiveCell(title: String) -> UITableViewCell {
         let cell = UITableViewCell()
         cell.textLabel?.textColor = .systemBlue
@@ -64,6 +70,7 @@ class ChatListController: UITableViewController {
             navigationItem.searchController = searchController
         }
         configureTableView()
+        setupSubviews()
     }
 
     override func viewWillAppear(_ animated: Bool) {
@@ -116,6 +123,15 @@ class ChatListController: UITableViewController {
             nc.removeObserver(viewChatObserver)
         }
     }
+    // MARK: - setup
+    private func setupSubviews() {
+        view.addSubview(emptySearchStateLabel)
+        emptySearchStateLabel.translatesAutoresizingMaskIntoConstraints = false
+        emptySearchStateLabel.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor).isActive = true
+        emptySearchStateLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40).isActive = true
+        emptySearchStateLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -40).isActive = true
+        emptySearchStateLabel.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true
+    }
 
     // MARK: - configuration
     private func configureTableView() {
@@ -155,7 +171,6 @@ class ChatListController: UITableViewController {
         return viewModel.numberOfRowsIn(section: section)
     }
 
-
     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
 
         let cellData = viewModel.cellDataFor(section: indexPath.section, row: indexPath.row)
@@ -268,6 +283,18 @@ class ChatListController: UITableViewController {
 
     func handleChatListUpdate() {
         tableView.reloadData()
+
+        if let emptySearchText = viewModel.emptySearchText {
+            let text = String.localizedStringWithFormat(
+                String.localized("search_no_result_for_x"),
+                emptySearchText
+            )
+            emptySearchStateLabel.text = text
+            emptySearchStateLabel.isHidden = false
+        } else {
+            emptySearchStateLabel.text = nil
+            emptySearchStateLabel.isHidden = true
+        }
     }
 
     func getArchiveCell(_ tableView: UITableView, title: String) -> UITableViewCell {

+ 34 - 1
deltachat-ios/Controller/GroupMembersViewController.swift

@@ -25,6 +25,7 @@ class NewGroupAddMembersViewController: GroupMembersViewController {
         fatalError("init(coder:) has not been implemented")
     }
 
+    // MARK - lifecycle
     override func viewDidLoad() {
         super.viewDidLoad()
         title = String.localized("group_add_members")
@@ -96,6 +97,7 @@ class AddGroupMembersViewController: GroupMembersViewController {
         fatalError("init(coder:) has not been implemented")
     }
 
+    // MARK: - lifecycle
     override func viewDidLoad() {
         super.viewDidLoad()
 
@@ -348,6 +350,12 @@ class GroupMembersViewController: UITableViewController, UISearchResultsUpdating
         return searchController
     }()
 
+    private lazy var emptySearchStateLabel: EmptyStateLabel = {
+        let label = EmptyStateLabel()
+        label.isHidden = false
+        return label
+    }()
+
     var selectedContactIds: Set<Int> = []
 
     init() {
@@ -360,6 +368,7 @@ class GroupMembersViewController: UITableViewController, UISearchResultsUpdating
         fatalError("init(coder:) has not been implemented")
     }
 
+    // MARK: - lifecycle
     override func viewDidLoad() {
         tableView.register(ContactCell.self, forCellReuseIdentifier: contactCellReuseIdentifier)
         navigationItem.searchController = searchController
@@ -367,8 +376,19 @@ class GroupMembersViewController: UITableViewController, UISearchResultsUpdating
             navigationItem.hidesSearchBarWhenScrolling = false
         }
         definesPresentationContext = true
+        setupSubviews()
+    }
+
+    private func setupSubviews() {
+        view.addSubview(emptySearchStateLabel)
+        emptySearchStateLabel.translatesAutoresizingMaskIntoConstraints = false
+        emptySearchStateLabel.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor).isActive = true
+        emptySearchStateLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40).isActive = true
+        emptySearchStateLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -40).isActive = true
+        emptySearchStateLabel.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true
     }
 
+    // MARK: - UITableView datasource + delegate
     override func numberOfSections(in _: UITableView) -> Int {
         return numberOfSections
     }
@@ -430,7 +450,7 @@ class GroupMembersViewController: UITableViewController, UISearchResultsUpdating
     func updateSearchResults(for searchController: UISearchController) {
         if let searchText = searchController.searchBar.text {
             filterContentForSearchText(searchText)
-        }
+        } 
     }
 
     private func filterContentForSearchText(_ searchText: String, scope _: String = String.localized("pref_show_emails_all")) {
@@ -442,6 +462,19 @@ class GroupMembersViewController: UITableViewController, UISearchResultsUpdating
         filteredContacts = contactsWithHighlights.filter { !$0.indexesToHighlight.isEmpty }
         tableView.reloadData()
         tableView.scrollToTop()
+
+        // handle empty searchstate
+        if isFiltering() && getNumberOfRowsForContactList() == 0 {
+            let text = String.localizedStringWithFormat(
+                String.localized("search_no_result_for_x"),
+                searchText
+            )
+            emptySearchStateLabel.text = text
+            emptySearchStateLabel.isHidden = false
+        } else {
+            emptySearchStateLabel.text = nil
+            emptySearchStateLabel.isHidden = true
+        }
     }
 
     private func updateContactCell(cell: ContactCell, contactWithHighlight: ContactWithSearchResults) {

+ 33 - 2
deltachat-ios/Controller/NewChatViewController.swift

@@ -26,6 +26,12 @@ class NewChatViewController: UITableViewController {
         return searchController
     }()
 
+    private lazy var emptySearchStateLabel: EmptyStateLabel = {
+        let label = EmptyStateLabel()
+        label.isHidden = false
+        return label
+    }()
+
     private var contactIds: [Int]
     private var filteredContactIds: [Int] = []
 
@@ -65,6 +71,7 @@ class NewChatViewController: UITableViewController {
         fatalError("init(coder:) has not been implemented")
     }
 
+    // MARK: - lifecycle
     override func viewDidLoad() {
         super.viewDidLoad()
 
@@ -78,6 +85,7 @@ class NewChatViewController: UITableViewController {
         }
         tableView.register(ActionCell.self, forCellReuseIdentifier: "actionCell")
         tableView.register(ContactCell.self, forCellReuseIdentifier: "contactCell")
+        setupSubviews()
     }
 
     override func viewWillAppear(_ animated: Bool) {
@@ -85,12 +93,22 @@ class NewChatViewController: UITableViewController {
         deviceContactAccessGranted = CNContactStore.authorizationStatus(for: .contacts) == .authorized
     }
 
+    // MARK: - setup
+    private func setupSubviews() {
+        view.addSubview(emptySearchStateLabel)
+        emptySearchStateLabel.translatesAutoresizingMaskIntoConstraints = false
+        emptySearchStateLabel.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor).isActive = true
+        emptySearchStateLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40).isActive = true
+        emptySearchStateLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -40).isActive = true
+        emptySearchStateLabel.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true
+    }
+
+    // MARK: - actions
     @objc func cancelButtonPressed() {
         dismiss(animated: true, completion: nil)
     }
 
     // MARK: - Table view data source
-
     override func numberOfSections(in _: UITableView) -> Int {
         return sectionsCount
     }
@@ -229,7 +247,6 @@ class NewChatViewController: UITableViewController {
 
     private func contactViewModelBy(row: Int) -> ContactCellViewModel {
         let id = contactIdByRow(row)
-
         return ContactCellViewModel.make(contactId: id, searchText: searchText, dcContext: dcContext)
   }
 
@@ -271,6 +288,7 @@ class NewChatViewController: UITableViewController {
         }
     }
 
+    // MARK: - search
     private func reactivateSearchBarIfNeeded() {
         if !searchBarIsEmpty {
             searchController.isActive = true
@@ -294,6 +312,19 @@ class NewChatViewController: UITableViewController {
         filteredContactIds = dcContext.getContacts(flags: DC_GCL_ADD_SELF, queryString: searchText)
         tableView.reloadData()
         tableView.scrollToTop()
+
+        // handle empty searchstate
+        if searchController.isActive && filteredContactIds.isEmpty {
+            let text = String.localizedStringWithFormat(
+                String.localized("search_no_result_for_x"),
+                searchText
+            )
+            emptySearchStateLabel.text = text
+            emptySearchStateLabel.isHidden = false
+        } else {
+            emptySearchStateLabel.text = nil
+            emptySearchStateLabel.isHidden = true
+        }
     }
 
     // MARK: - coordinator

+ 9 - 1
deltachat-ios/ViewModel/ChatListViewModel.swift

@@ -20,7 +20,8 @@ protocol ChatListViewModelProtocol: class, UISearchResultsUpdating {
     func beginSearch()
     func endSearch()
     func titleForHeaderIn(section: Int) -> String? // only visible on search results
-    
+    var emptySearchText: String? { get }
+
     /// returns ROW of table
     func deleteChat(chatId: Int) -> Int
     func archiveChatToggle(chatId: Int)
@@ -167,6 +168,13 @@ class ChatListViewModel: NSObject, ChatListViewModelProtocol {
         resetSearch()
     }
 
+    var emptySearchText: String? {
+        if searchActive && numberOfSections == 0 {
+            return searchText
+        }
+        return nil
+    }
+
     func deleteChat(chatId: Int) -> Int {
         // find index of chatId
         let indexToDelete = Array(0..<chatList.length).filter { chatList.getChatId(index: $0) == chatId }.first

+ 4 - 4
deltachat-ios/az.lproj/Localizable.strings

@@ -216,7 +216,7 @@
 // search
 "search" = "Axtarış";
 "search_explain" = "Çatlar, kontaktlar və mesajlar axtar";
-"search_no_result_for_x" = "\"%s\" üçün heç bir nəticə tapılmadı";
+"search_no_result_for_x" = "\"%1$@\" üçün heç bir nəticə tapılmadı";
 
 
 // create/edit groups, contact/group profile
@@ -278,8 +278,8 @@
 
 
 // preferences
-"pref_using_custom" = ":Xüsusi istifadə %s";
-"pref_using_default" = "Varsayılan istifadə: %s";
+"pref_using_custom" = ":Xüsusi istifadə %1$@";
+"pref_using_default" = "Varsayılan istifadə: %1$@";
 "pref_profile_info_headline" = "Profil məlumatınız";
 "pref_profile_photo" = "Profil şəkili";
 "pref_blocked_contacts" = "Bloklanmış kontaktlar";
@@ -445,7 +445,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d yeni mesaj %2$d çatda";
 "notify_most_recent_from" = "Ən son olanlar: %1$@";
-"notify_media_message_with_text" = "Media messaj: %s";
+"notify_media_message_with_text" = "Media messaj: %1$@";
 "notify_mark_all_read" = "Hamısını oxunmuş olaraq işarələ";
 "notify_mark_read" = "Oxuma işarəsi";
 "notify_media_message" = "Media mesaj";

+ 4 - 4
deltachat-ios/ca.lproj/Localizable.strings

@@ -177,7 +177,7 @@
 // search
 "search" = "Busca";
 "search_explain" = "Busca als xats, contactes i missatges";
-"search_no_result_for_x" = "No s\'han trobat resultats per \"%s\"";
+"search_no_result_for_x" = "No s\'han trobat resultats per \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -233,8 +233,8 @@
 
 
 // preferences
-"pref_using_custom" = "Ús personalitzat: %s";
-"pref_using_default" = "Ús per defecte: %s";
+"pref_using_custom" = "Ús personalitzat: %1$@";
+"pref_using_default" = "Ús per defecte: %1$@";
 "pref_profile_info_headline" = "Informació del vostre perfil";
 "pref_profile_photo" = "Fotografia de perfil";
 "pref_blocked_contacts" = "Contactes bloquejats";
@@ -385,7 +385,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d missatges nous en %2$d xats";
 "notify_most_recent_from" = "El més nou des de : %1$@";
-"notify_media_message_with_text" = "Missatge multimèdia: %s";
+"notify_media_message_with_text" = "Missatge multimèdia: %1$@";
 "notify_mark_all_read" = "Marca\'ls tots com a llegits";
 "notify_mark_read" = "Marca\'l com a llegit";
 "notify_media_message" = "Missatge multimèdia";

+ 4 - 4
deltachat-ios/da.lproj/Localizable.strings

@@ -201,7 +201,7 @@
 // search
 "search" = "Søge";
 "search_explain" = "Søge efter samtaler, kontakter og beskeder";
-"search_no_result_for_x" = "Ingen resultater fundet for  \"%s\"";
+"search_no_result_for_x" = "Ingen resultater fundet for  \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -265,8 +265,8 @@
 
 
 // preferences
-"pref_using_custom" = "Bruger tilpasset: %s";
-"pref_using_default" = "Bruger standard: %s";
+"pref_using_custom" = "Bruger tilpasset: %1$@";
+"pref_using_default" = "Bruger standard: %1$@";
 "pref_profile_info_headline" = "Profil information";
 "pref_profile_photo" = "Profil billede";
 "pref_blocked_contacts" = "Blokerede kontakter";
@@ -423,7 +423,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d nye beskeder i %2$d samtaler";
 "notify_most_recent_from" = "Nylig fra: %1$@";
-"notify_media_message_with_text" = "Medie besked: %s";
+"notify_media_message_with_text" = "Medie besked: %1$@";
 "notify_mark_all_read" = "Vælge alle som læst";
 "notify_mark_read" = "Vælge læst";
 "notify_media_message" = "Medie besked";

+ 4 - 6
deltachat-ios/de.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Suchen";
 "search_explain" = "Suche nach Chats, Kontakten und Nachrichten";
-"search_no_result_for_x" = "Keine Ergebnisse für \"%s\" gefunden.";
+"search_no_result_for_x" = "Keine Ergebnisse für \"%1$@\" gefunden.";
 
 
 // create/edit groups, contact/group profile
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Benutzerdefiniert verwenden: %s";
-"pref_using_default" = "Standard verwenden: %s";
+"pref_using_custom" = "Benutzerdefiniert verwenden: %1$@";
+"pref_using_default" = "Standard verwenden: %1$@";
 "pref_profile_info_headline" = "Mein Profil";
 "pref_profile_photo" = "Profilbild";
 "pref_blocked_contacts" = "Blockierte Kontakte";
@@ -524,7 +524,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d neue Nachrichten in %2$d Chats";
 "notify_most_recent_from" = "Letzter Stand von: %1$@";
-"notify_media_message_with_text" = "Medienmitteilung: %s";
+"notify_media_message_with_text" = "Medienmitteilung: %1$@";
 "notify_mark_all_read" = "Alle als gelesen markieren";
 "notify_mark_read" = "Als gelesen markieren";
 "notify_media_message" = "Medienmitteilung";
@@ -643,5 +643,3 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "Zum Hinweis \"Hintergrundverbindung aktiviert\" im Systembereich:\n\n👉 Der Hinweis hält das Betriebssystem normalerweise davon ab, die Verbindung zwischen Delta Chat und Ihrem Server zu unterbrechen.\n\n👉 Wenn der Hinweis ohne Ihr Zutun verschwindet wurde die Verbindung vermutlich dennoch unterbrochen. Auch wenn dies seltsam erscheint - viele Handyhersteller tun genau dies - auf der Seite https://dontkillmyapp.com finden Sie herstellerspezifische Hinweise, was Sie dagegen tun können.\n\nWie auch immer - wir freuen uns, dass wir die Hintergrundverbindung grundsätzlich stabiler gestalten konnten und so viele Benutzerwünsche erfüllen könnten 🤗";
-
-

+ 6 - 5
deltachat-ios/en.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Search";
 "search_explain" = "Search for chats, contacts, and messages";
-"search_no_result_for_x" = "No results found for \"%s\"";
+"search_no_result_for_x" = "No results found for \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -299,7 +299,7 @@
 // Translators: %1$s will be replaced by the email address
 "login_error_cannot_login" = "Cannot login as \"%1$@\". Please check if the email address and the password are correct.";
 // Translators: %1$s will be replaced by the server name (eg. imap.somewhere.org) and %2$s will be replaced by the human-readable response from the server. this response may be a single word or some sentences and may or may not be localized.
-"login_error_server_response" = "Response from %1$@: %2$@\n\nSome providers place additional information in your inbox; you can check them it eg. in the web frontend. Consult your provider or friends if you run into problems.";
+"login_error_server_response" = "Response from %1$@: %2$@\n\nSome providers place additional information in your inbox; you can check them eg. in the web frontend. Consult your provider or friends if you run into problems.";
 
 // TLS certificate checks
 "accept_invalid_hostnames" = "Accept invalid hostnames";
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Using custom: %s";
-"pref_using_default" = "Using default: %s";
+"pref_using_custom" = "Using custom: %1$@";
+"pref_using_default" = "Using default: %1$@";
 "pref_profile_info_headline" = "Your profile info";
 "pref_profile_photo" = "Profile picture";
 "pref_blocked_contacts" = "Blocked contacts";
@@ -524,7 +524,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d new messages in %2$d chats";
 "notify_most_recent_from" = "Most recent from: %1$@";
-"notify_media_message_with_text" = "Media message: %s";
+"notify_media_message_with_text" = "Media message: %1$@";
 "notify_mark_all_read" = "Mark all as read";
 "notify_mark_read" = "Mark read";
 "notify_media_message" = "Media message";
@@ -643,6 +643,7 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "You may already have noticed, that there is a hint \"Background connection enabled\" shown by the system.\n\n👉 The hint normally prevents the operating system from killing the connection between Delta Chat and your server.\n\n👉 If the hint disappears without any action on your part, the connection has probably been killed anyway.\nIf you think this is weird, we totally agree - but many manufacturers do exactly that. The site https://dontkillmyapp.com shows some workarounds.\n\nHowever, we are happy that we could improve the receiving of messages in background with this change and could fulfil the requests of many users - thanks for reporting 🤗";
+"device_talk_background_connection2_android" = "You can now enable and disabled the \"Background connection\" as needed at \"Settings / Notifications\".";
 
 
 

+ 1 - 1
deltachat-ios/eo.lproj/Localizable.strings

@@ -228,7 +228,7 @@
 // search
 "search" = "Serĉi";
 "search_explain" = "Serĉi babilojn, kontaktojn, kaj mesaĝojn";
-"search_no_result_for_x" = "Neniu rezulto trovita por \"%s\"";
+"search_no_result_for_x" = "Neniu rezulto trovita por \"%1$@\"";
 
 
 // create/edit groups, contact/group profile

+ 4 - 6
deltachat-ios/es.lproj/Localizable.strings

@@ -239,7 +239,7 @@
 // search
 "search" = "Buscar";
 "search_explain" = "Buscar chats, contactos, y mensajes";
-"search_no_result_for_x" = "No se encontraron resultados para \"%s\"";
+"search_no_result_for_x" = "No se encontraron resultados para \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -315,8 +315,8 @@
 
 
 // preferences
-"pref_using_custom" = "Usando valor personalizado: %s";
-"pref_using_default" = "Usando valor por defecto: %s";
+"pref_using_custom" = "Usando valor personalizado: %1$@";
+"pref_using_default" = "Usando valor por defecto: %1$@";
 "pref_profile_info_headline" = "Información de perfil ";
 "pref_profile_photo" = "Foto de perfil";
 "pref_blocked_contacts" = "Contactos bloqueados";
@@ -493,7 +493,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d nuevos mensajes en %2$d chats";
 "notify_most_recent_from" = "Más reciente de: %1$@";
-"notify_media_message_with_text" = "Mensaje multimedia: %s";
+"notify_media_message_with_text" = "Mensaje multimedia: %1$@";
 "notify_mark_all_read" = "Marcar todo como leído";
 "notify_mark_read" = "Marcar como leído";
 "notify_media_message" = "Mensaje multimedia";
@@ -612,5 +612,3 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "Es posible que ya haya notado que el sistema muestra una notificación \"Conexión de fondo habilitada\".\n\n👉 Esta notificación normalmente impide que el sistema operativo corte la conexión entre Delta Chat y su servidor.\n\n👉 Si la notificación desaparece sin ninguna acción de su parte, la conexión probablemente se haya interrumpido de todos modos. Si cree, esto es extraño, estamos totalmente de acuerdo, pero muchos fabricantes hacen exactamente eso. El sitio https://dontkillmyapp.com muestra algunas soluciones.\n\nSin embargo, estamos contentos de poder mejorar la recepción de mensajes en segundo plano con este cambio y satisfacer las solicitudes de muchos usuarios - gracias por reportar 🤗";
-
-

+ 15 - 4
deltachat-ios/eu.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Bilatu";
 "search_explain" = "Bilatu txatak, kontaktuak, eta mezuak.";
-"search_no_result_for_x" = "Ez da emaitzarik aurkitu \"%s\" bilaketarentzat";
+"search_no_result_for_x" = "Ez da emaitzarik aurkitu \"%1$@\" bilaketarentzat";
 
 
 // create/edit groups, contact/group profile
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Pertsonalizatua erabiltzen: %s";
-"pref_using_default" = "Lehenetsia erabiltzen: %s";
+"pref_using_custom" = "Pertsonalizatua erabiltzen: %1$@";
+"pref_using_default" = "Lehenetsia erabiltzen: %1$@";
 "pref_profile_info_headline" = "Zure profileko informazioa";
 "pref_profile_photo" = "Profileko argazkia";
 "pref_blocked_contacts" = "Blokeatutako kontaktuak";
@@ -422,6 +422,11 @@
 "pref_background_default_color" = "Lehenetsitako kolorea";
 "pref_background_custom_image" = "Irudi pertsonalizatua";
 "pref_background_custom_color" = "Kolore pertsonalizatua";
+// disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable
+"pref_reliable_service" = "Bigarren planoko konexio egonkorra";
+"pref_reliable_service_explain" = "Etengabeko jakinarazpena eskatzen du";
+
+
 // automatically delete message
 "autodel_title" = "Automatikoki ezabatu mezuak";
 "autodel_title_short" = "Automatikoki ezabatu";
@@ -518,7 +523,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d mezu berri %2$d txatetan";
 "notify_most_recent_from" = "%1$@(r)en azkena";
-"notify_media_message_with_text" = "Multimedia mezua: %s";
+"notify_media_message_with_text" = "Multimedia mezua: %1$@";
 "notify_mark_all_read" = "Markatu denak irakurrita gisa";
 "notify_mark_read" = "Markatu irakurrita gisa";
 "notify_media_message" = "Multimedia mezua";
@@ -634,3 +639,9 @@
 // iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings"
 
 
+// android specific strings, developers: please take care to remove strings that are no longer used!
+// this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
+"device_talk_background_connection_android" = "Agian ikusi duzu, \"Bigarren planoko konexioa gaituta\" erakusten du sistemak.\n\n👉 Jakinarazpenak normalean sistema eragileak Delta Chat eta zure zerbitzariaren arteko konexioa etetea eragozten du.\n\n👉 Zuk ezer egin gabe desagertzen bada jakinarazpena, konexioa eten egin dela esan nahi lezake.\nHau arraroa dela uste baduzu, ados gaude, baina ekoizleek horrelakoak egiten dituzte. https://dontkillmyapp.com guneak konponbide batzuk erakusten dit,\n\nEdonola ere, aldaketa honekin bigarren planoan mezuak jasotzea hobetu izanak pozten gaitu, erabiltzaile askoren eskaerei erantzunez., eskerrik asko berri emateagatik.";
+"device_talk_background_connection2_android" = "\"Bigarren planoko konexioa\" nahi eran gaitu edo desgaitu dezakezu  \"Ezarpenak / Jakinarazpenak\" atalean.";
+
+

+ 4 - 4
deltachat-ios/fr.lproj/Localizable.strings

@@ -239,7 +239,7 @@
 // search
 "search" = "Chercher";
 "search_explain" = "Rechercher des discussions, des contacts ou des messages";
-"search_no_result_for_x" = "Aucun résultat trouvé pour \"%s\"";
+"search_no_result_for_x" = "Aucun résultat trouvé pour \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -315,8 +315,8 @@
 
 
 // preferences
-"pref_using_custom" = "Usage de la personnalisation : %s";
-"pref_using_default" = "Utilisation par défaut : %s";
+"pref_using_custom" = "Usage de la personnalisation : %1$@";
+"pref_using_default" = "Utilisation par défaut : %1$@";
 "pref_profile_info_headline" = "Informations de votre profil";
 "pref_profile_photo" = "Photo du profil";
 "pref_blocked_contacts" = "Contacts bloqués";
@@ -493,7 +493,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d nouveaux messages dans %2$d tchats";
 "notify_most_recent_from" = "Plus récents depuis : %1$@";
-"notify_media_message_with_text" = "Message multimédia: %s";
+"notify_media_message_with_text" = "Message multimédia: %1$@";
 "notify_mark_all_read" = "Tout marquer comme lus";
 "notify_mark_read" = "Marquer comme lu";
 "notify_media_message" = "Message multimédia";

+ 9 - 8
deltachat-ios/gl.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Buscar";
 "search_explain" = "Buscar conversas, contactos e mensaxes";
-"search_no_result_for_x" = "Non hai resultados para \"%s\"";
+"search_no_result_for_x" = "Non hai resultados para \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Utilizar personalizado: %s";
-"pref_using_default" = "Utilizando por omisión: %s";
+"pref_using_custom" = "Utilizar personalizado: %1$@";
+"pref_using_default" = "Utilizando por omisión: %1$@";
 "pref_profile_info_headline" = "Info do teu perfil";
 "pref_profile_photo" = "Imaxe de perfil";
 "pref_blocked_contacts" = "Contactos bloqueados";
@@ -343,7 +343,7 @@
 "pref_vibrate" = "Vibrar";
 "pref_chat_settings" = "Axustes da conversa";
 "pref_change_secret" = "Cambiar seguridade";
-"pref_change_secret_explain" = "Cambiar o PIN / patrón / pegada dactilar a través dos axustes do sistema";
+"pref_change_secret_explain" = "Cambiar o PIN / patrón / impresión dactilar a través dos axustes do sistema";
 "pref_screen_security" = "Seguridade da pantalla";
 // Translators: The wording must indicate that we can't guarantee that, its a System flag that we set. But the System in question must honor it.
 "pref_screen_security_explain" = "Solicitar bloqueo de captura de pantalla para a lista de recentes e dentro da app";
@@ -480,7 +480,7 @@
 
 // screen lock
 "screenlock_title" = "Bloqueo de pantalla";
-"screenlock_explain" = "Limita o acceso co bloqueo de pantalla Android ou pegada dactilar; para evitar mostrar o contido, por favor activa \"Seguridade de Pantalla\".";
+"screenlock_explain" = "Limita o acceso co bloqueo de pantalla Android ou impresión dactilar; para evitar mostrar o contido, por favor activa \"Seguridade de Pantalla\".";
 "screenlock_authentication_failed" = "Fallo de Autenticación.";
 "screenlock_unlock_title" = "Desbloquear Delta Chat";
 "screenlock_unlock_description" = "Introduce o código establecido no sistema para desbloquerar Delta Chat.";
@@ -494,8 +494,8 @@
 "qrscan_title" = "Escanear código QR";
 "qrscan_hint" = "Mantén a cámara sobre o código QR.";
 "qrscan_ask_join_group" = "Queres unirte ao grupo \"%1$@\"?";
-"qrscan_fingerprint_mismatch" = "A pegada escaneada non concorda coa última vista para %1$@.";
-"qrscan_no_addr_found" = "Este código QR contén unha pegada dactilar pero non un enderezo de correo.\n\nPara unha verificación fora de liña, por favor establece unha conexión cifrada co correspondente.";
+"qrscan_fingerprint_mismatch" = "A impresión escaneada non concorda coa última vista para %1$@.";
+"qrscan_no_addr_found" = "Este código QR contén unha imprsión dixital pero non un enderezo de correo.\n\nPara unha verificación fora de liña, por favor establece unha conexión cifrada co correspondente.";
 "qrscan_contains_text" = "Texto escaneado no código QR:\n\n%1$@";
 "qrscan_contains_url" = "URL escaneado no código QR:\n\n%1$@";
 "qrscan_fingerprint_label" = "Pegada dactilar";
@@ -524,7 +524,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d novas mensaxes en %2$d conversas";
 "notify_most_recent_from" = "Máis recente desde: %1$@";
-"notify_media_message_with_text" = "Mensaxe de medios: %s";
+"notify_media_message_with_text" = "Mensaxe de medios: %1$@";
 "notify_mark_all_read" = "Marcar todo como lido";
 "notify_mark_read" = "Marcar como lido";
 "notify_media_message" = "Mensaxe de medios";
@@ -643,5 +643,6 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "Igual xa o notaches, hai un aviso \"Conexión en segundo plano activada\" na bandexa do sistema.\n\n👉 O aviso normalmente evita que o sistema corte a conexión entre Delta Chat e o teu servidor.\n\n👉 O aviso desaparece sen que teñas que facer nada, a conexión vaise cortar igualmente.\nSe cres que é raro, entendémolo - pero moitos fabricantes fan precisamente eso. A web https://dontkillmyapp.com proporciona posibles solucións.\n\nPorén, agrádanos poder mellorar a recepción de mensaxes en segundo plano con este cambio e poder cumprir coas expectativas de moitas usuarias - grazas por informarnos  🤗";
+"device_talk_background_connection2_android" = "Se o precisas xa podes activar / desactivar a \"Conexión en segundo plano\" nos \"Axustes / Notificacións\".";
 
 

+ 1 - 1
deltachat-ios/hr.lproj/Localizable.strings

@@ -133,7 +133,7 @@
 "saved_messages" = "Sačuvane poruke";
 // search
 "search" = "Traži";
-"search_no_result_for_x" = "Nema pronađenih rezultata za \"%s\"";
+"search_no_result_for_x" = "Nema pronađenih rezultata za \"%1$@\"";
 
 
 // create/edit groups, contact/group profile

+ 1 - 1
deltachat-ios/hu.lproj/Localizable.strings

@@ -277,7 +277,7 @@
 "contact_not_verified" = "%1$@ nem ellenőrizhető";
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$dúj üzenet %2$d beszélgetésben";
-"notify_media_message_with_text" = "Médiaüzenet: %s";
+"notify_media_message_with_text" = "Médiaüzenet: %1$@";
 "notify_mark_all_read" = "Mindet olvasottnak jelöl";
 "notify_mark_read" = "Olvasottnak jelöl";
 "notify_media_message" = "Médiaüzenet";

+ 4 - 4
deltachat-ios/id.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Cari";
 "search_explain" = "Mencari obrolan, kontak dan pesan";
-"search_no_result_for_x" = "Tak ada hasil dari \"%s\"";
+"search_no_result_for_x" = "Tak ada hasil dari \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -316,8 +316,8 @@
 
 
 // preferences
-"pref_using_custom" = "Menggunakan custom: %s";
-"pref_using_default" = "Menggunakan default: %s";
+"pref_using_custom" = "Menggunakan custom: %1$@";
+"pref_using_default" = "Menggunakan default: %1$@";
 "pref_profile_info_headline" = "Info profil Anda";
 "pref_profile_photo" = "Gambar profil";
 "pref_blocked_contacts" = "Kontak yang diblokir";
@@ -472,7 +472,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$dpesan baru di%2$d obrolan";
 "notify_most_recent_from" = "Terbaru dari: %1$@";
-"notify_media_message_with_text" = "Pesan media: %s";
+"notify_media_message_with_text" = "Pesan media: %1$@";
 "notify_mark_all_read" = "Tandai semua telah dibaca";
 "notify_media_message" = "Pesan media";
 "notify_reply_button" = "Balasan";

+ 18 - 17
deltachat-ios/it.lproj/Localizable.strings

@@ -53,7 +53,7 @@
 // Translators: used as a headline in sections with actions that cannot be undone. could also be "Caution" or "Cave" or so.
 "danger" = "Attenzione";
 // n_min_ago is deprecated, use n_minutes instead
-"n_min_ago" = "%d min";
+"n_min_ago" = "%d min.";
 "today" = "Oggi";
 "yesterday" = "Ieri";
 "this_week" = "Questa settimana";
@@ -108,8 +108,8 @@
 "menu_new_group" = "Nuovo gruppo";
 "menu_new_verified_group" = "Nuovo gruppo verificato";
 "menu_send" = "Inviato";
-"menu_toggle_keyboard" = "Alterna tastiera emoji";
-"menu_edit_group" = "Modifica grupp";
+"menu_toggle_keyboard" = "Attiva/Disattiva tastiera emoji";
+"menu_edit_group" = "Modifica gruppo";
 "menu_group_name_and_image" = "Nome e immagine gruppo";
 "menu_show_map" = "Mostra mappa";
 "menu_show_global_map" = "Mostra tutte le posizioni";
@@ -155,8 +155,8 @@
 "title_share_location" = "Condividi posizione con tutti i membri";
 "device_talk" = "Messaggi del dispositivo";
 "device_talk_subtitle" = "Messaggi generati localmente";
-"device_talk_explain" = "I messaggio in questa chat vengono generati localmente da Delta Chat. Gli sviluppatori li usano per informarti sugli aggiornamenti o sui problemi d\'utilizzo.";
-"device_talk_welcome_message" = "Benvenuto in Delta Chat! - Delta Chat ha l\'aspetto e lo stile di altre popolari applicazioni di messaggistica, ma non costringe ad un controllo centralizzato, al tracciamento o alla vendita tua,  dei tuoi amici, colleghi o familiari a grandi organizzazioni.\n \n Tecnicamente, Delta Chat è un\'applicazione di posta elettronica con un\'interfaccia moderna. L\'email in una nuova veste 👻 \n \nUtilizza Delta Chat con chiunque: basta conoscere il loro indirizzo e-mail. I destinatari non hanno bisogno di installare Delta Chat, visitare siti web o iscriversi da nessuna parte -  ma, naturalmente se lo desiderano, puoi suggerirgli 👉 https://get.delta.chat";
+"device_talk_explain" = "I messaggi in questa chat vengono generati localmente da Delta Chat. Gli sviluppatori li usano per informarti sugli aggiornamenti o sui problemi d\'utilizzo.";
+"device_talk_welcome_message" = "Benvenuto in Delta Chat! - Delta Chat ha l\'aspetto e lo stile di altre popolari applicazioni di messaggistica, ma non costringe ad un controllo centralizzato, al tracciamento o alla vendita tua, dei tuoi amici, colleghi o familiari a grandi organizzazioni.\n\nTecnicamente, Delta Chat è un\'applicazione di posta elettronica con un\'interfaccia moderna. L\'email in una nuova veste 👻\n\nUtilizza Delta Chat con chiunque: basta conoscere il loro indirizzo e-mail. I destinatari non hanno bisogno di installare Delta Chat, visitare siti web o iscriversi da nessuna parte - ma, naturalmente se lo desiderano, puoi suggerirgli 👉 https://get.delta.chat";
 "edit_contact" = "Modifica contatto";
 // Translators: "Pin" here is the verb for pinning, making sth. sticky. this is NOT the appreviation for "pin number".
 "pin_chat" = "Fissa chat";
@@ -191,10 +191,10 @@
 "ask_delete_contacts" = "Eliminare il contatto? Questo eliminerà per sempre il contatto selezionato.\n\nI contatti con chat attive o presenti nella rubrica del sistema non possono essere eliminati permanentemente.";
 "ask_delete_contact" = "Vuoi eliminare per sempre %1$@?\n\nI contatti con chat attive e quelli in rubrica non possono essere eliminati permanentemente.";
 "cannot_delete_contacts_in_use" = "Impossibile eliminare contatti con chat in corso.";
-"ask_start_chat_with" = "Chattare with %1$@?";
+"ask_start_chat_with" = "Chattare con %1$@?";
 // Translators: %1$s will be replaces by a comma separated list of names
 "ask_remove_members" = "Rimuovere %1$@ dal gruppo?";
-"info_outdated_app_title" = "La applicazione non è aggiornata.";
+"info_outdated_app_title" = "L\' applicazione non è aggiornata.";
 "info_outdated_app_text" = "Sembra che tu abbia installato Delta Chat da una sorgente che non fornisce aggiornamenti automatici (es. GitHub). Scaricala da uno store per riceve nuove funzionalità e bug fix.";
 "info_outdated_app_dialog_title" = "Aggiorna sorgenti";
 "info_outdated_app_dialog_text" = "Delta Chat è disponibile su:";
@@ -240,7 +240,7 @@
 // search
 "search" = "Cerca";
 "search_explain" = "Cerca in chat, contatti e messaggi";
-"search_no_result_for_x" = "Nessun risultato per \"%s\"";
+"search_no_result_for_x" = "Nessun risultato per \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -287,7 +287,7 @@
 "login_smtp_security" = "Sicurezza SMTP";
 "login_auth_method" = "Metodo di autorizzazione";
 "login_info_oauth2_title" = "Usare il setup semplificato?";
-"login_info_oauth2_text" = "L\'indirizzo email inserito supporta l\'autenticazione semplificata (OAuth2).\n\nContinuando, puoi autorizzare Delta Chat ad operare come app di messaggistica via e-mail.\n\nNon esistono server di Delta Chat, i tuoi dati restano nel tuo dispositivo!";
+"login_info_oauth2_text" = "L\'indirizzo email inserito supporta l\'autenticazione semplificata (OAuth2.0).\n\nContinuando, puoi autorizzare Delta Chat ad operare come app di messaggistica via e-mail.\n\nNon esistono server di Delta Chat, i tuoi dati restano nel tuo dispositivo!";
 "login_certificate_checks" = "Controlli certificato";
 "login_error_mail" = "Inserisci un indirizzo email valido";
 "login_error_server" = "Inserisci un server / indirizzo IP valido";
@@ -320,13 +320,13 @@
 
 
 // preferences
-"pref_using_custom" = "Personalizzato in uso: %s";
-"pref_using_default" = "Predefinito in uso: %s";
+"pref_using_custom" = "Personalizzato in uso: %1$@";
+"pref_using_default" = "Predefinito in uso: %1$@";
 "pref_profile_info_headline" = "Le tue info profilo";
 "pref_profile_photo" = "Foto profilo";
 "pref_blocked_contacts" = "Contatti bloccati";
 "pref_profile_photo_remove_ask" = "Rimuvere la foto profilo?";
-"pref_help_url" = "https://delta.chat/en/help";
+"pref_help_url" = "https://delta.chat/it/help";
 "pref_password_and_account_settings" = "Password e account";
 "pref_who_can_see_this_information" = "Chi può vedere queste informazioni?";
 "pref_who_can_see_profile_explain" = "L\'immagine del tuo profilo e il tuo nome saranno mostrati insieme ai tuoi messaggi quando comunichi con altri utenti. Le informazioni già inviate non possono essere cancellate o rimosse.";
@@ -490,7 +490,7 @@
 
 
 // qr code stuff
-"qr_code" = "Codic QR";
+"qr_code" = "Codice QR";
 "qrscan_title" = "Scansiona codice QR";
 "qrscan_hint" = "Posiziona la camera sopra il codice QR";
 "qrscan_ask_join_group" = "Vuoi entrare nel gruppo \"%1$@\"?";
@@ -524,13 +524,13 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d nuovi messaggi in %2$d chat";
 "notify_most_recent_from" = "Più recente da: %1$@";
-"notify_media_message_with_text" = "Messaggio multimediale: %s";
+"notify_media_message_with_text" = "Messaggio multimediale: %1$@";
 "notify_mark_all_read" = "Segna tutti come letti";
 "notify_mark_read" = "Segna come letto";
 "notify_media_message" = "Messaggio multimediale";
 "notify_reply_button" = "Rispondi";
 "notify_new_message" = "Nuovo messaggio";
-"notify_background_connection_enabled" = "Connession in background abilitata";
+"notify_background_connection_enabled" = "Connessione in background abilitata";
 "notify_priority_high" = "Alta";
 "notify_priority_max" = "Massima";
 "notify_name_and_message" = "Nome e messaggio";
@@ -598,7 +598,7 @@
 "autocrypt_key_transfer_desktop" = "Trasferimento chiave Autocrypt";
 "initiate_key_transfer_desktop" = "Un \'Messaggio di configurazione Autocrypt\' condivide in sicurezza le tue impostazioni end-to-end con altre app compatibili. Le impostazioni sono criptate con un codice mostrato qui che deve essere inserito nell\'altro dispositivo.";
 "reply_to_message_desktop" = "Rispondi al messaggio";
-"select_group_image_desktop" = "Seleziona immagine grupp";
+"select_group_image_desktop" = "Seleziona immagine gruppo";
 "imex_progress_title_desktop" = "Avanzamento backup";
 "download_attachment_desktop" = "Scarica allegato";
 "export_backup_desktop" = "Esporta backup";
@@ -642,6 +642,7 @@
 
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
-"device_talk_background_connection_android" = "Potresti aver già notato che esiste una notifica \"Connessione in background abilitata\" mostrata dal sistema.\n\n 👉 La notifica normalmente impedisce al sistema operativo di interrompere la connessione tra Delta Chat e il tuo server.\n\n Se la notifica scompare senza alcuna azione da parte tua, la connessione è stata probabilmente soppressa.\nSe pensi che sia strano, siamo totalmente d\'accordo - ma molti produttori fanno esattamente questo. Il sito https://dontkillmyapp.com mostra alcune soluzioni alternative.\n\nTuttavia, siamo felici di poter migliorare la ricezione dei messaggi in background con questa modifica e di soddisfare le richieste di molti utenti, grazie per avercelo segnalato 🤗";
+"device_talk_background_connection_android" = "Potresti aver già notato che esiste una notifica \"Connessione in background abilitata\" mostrata dal sistema.\n\n 👉 La notifica normalmente impedisce al sistema operativo di interrompere la connessione tra Delta Chat e il tuo server.\n\n👉 Se la notifica scompare senza alcuna azione da parte tua, la connessione è stata probabilmente soppressa.\nSe pensi che sia strano, siamo totalmente d\'accordo - ma molti produttori fanno esattamente questo. Il sito https://dontkillmyapp.com mostra alcune soluzioni alternative.\n\nTuttavia, siamo felici di poter migliorare la ricezione dei messaggi in background con questa modifica e di soddisfare le richieste di molti utenti, grazie per avercelo segnalato 🤗";
+"device_talk_background_connection2_android" = "Ora puoi abilitare e disabilitare la \"Connessione in background\" secondo necessità in \"Impostazioni / Notifiche\".";
 
 

+ 1 - 1
deltachat-ios/it.lproj/Localizable.stringsdict

@@ -15,7 +15,7 @@
 			<key>one</key>
 			<string>%d min</string>
 			<key>other</key>
-			<string>%d min</string>
+			<string>%d min.</string>
 		</dict>
 	</dict>
 	<key>n_hours</key>

+ 1 - 1
deltachat-ios/ja.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 // search
 "search" = "検索";
 "search_explain" = "チャット・メッセージ・連絡先を検索";
-"search_no_result_for_x" = "「%s」は見付かりませんでした。";
+"search_no_result_for_x" = "「%1$@」は見付かりませんでした。";
 
 
 // create/edit groups, contact/group profile

+ 2 - 2
deltachat-ios/lt.lproj/Localizable.strings

@@ -203,7 +203,7 @@
 // search
 "search" = "Ieškoti";
 "search_explain" = "Ieškokite pokalbių, adresatų ir žinučių";
-"search_no_result_for_x" = "Nerasta jokių rezultatų pagal užklausą \"%s\"";
+"search_no_result_for_x" = "Nerasta jokių rezultatų pagal užklausą \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -419,7 +419,7 @@
 "qrshow_join_contact_no_connection_toast" = "Nėra interneto ryšio, nepavyksta atlikti QR kodo sąrankos.";
 "contact_not_verified" = "Nepavyksta patvirtinti %1$@";
 "notify_most_recent_from" = "Naujausia nuo: %1$@";
-"notify_media_message_with_text" = "Medijos žinutė: %s";
+"notify_media_message_with_text" = "Medijos žinutė: %1$@";
 "notify_mark_all_read" = "Žymėti visas kaip skaitytas";
 "notify_mark_read" = "Žymėti kaip skaitytą";
 "notify_media_message" = "Medijos žinutė";

+ 5 - 4
deltachat-ios/nl.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Zoeken";
 "search_explain" = "Zoek naar gesprekken, contactpersonen en berichten";
-"search_no_result_for_x" = "Geen resultaten gevonden voor \"%s\"";
+"search_no_result_for_x" = "Geen resultaten gevonden voor \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Aangepast wordt gebruikt: %s";
-"pref_using_default" = "Standaard wordt gebruikt: %s";
+"pref_using_custom" = "Aangepast wordt gebruikt: %1$@";
+"pref_using_default" = "Standaard wordt gebruikt: %1$@";
 "pref_profile_info_headline" = "Mijn profiel";
 "pref_profile_photo" = "Profielfoto";
 "pref_blocked_contacts" = "Geblokkeerde contactpersonen";
@@ -524,7 +524,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d nieuwe berichten in %2$d gesprekken";
 "notify_most_recent_from" = "Recentste van: %1$@";
-"notify_media_message_with_text" = "Mediabericht: %s";
+"notify_media_message_with_text" = "Mediabericht: %1$@";
 "notify_mark_all_read" = "Alles markeren als gelezen";
 "notify_mark_read" = "Markeren als gelezen";
 "notify_media_message" = "Mediabericht";
@@ -643,5 +643,6 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "Je hebt wellicht al gemerkt dat er een systeemmelding \'Achtergrondverbinding ingeschakeld\' wordt getoond.\n\n👉 Deze melding voorkomt dat het systeem de verbinding tussen Delta Chat en je server verbreekt.\n\n👉 Als de melding zomaar verdwijnt, dan is de verbinding waarschijnlijk verbroken.\nVind je dat vreemd? Wij ook. Maar helaas doen sommige fabrikanten dit. Op de website https://dontkillmyapp.com vind je mogelijke oplossingen hiervoor.\n\nDesalniettemin zijn we blij dat we op deze manier het ophalen van berichten op de achtergrond hebben verbeterd en daarmee een grote gebruikerswens in vervulling hebben laten gaan. Bedankt voor alle steun 🤗";
+"device_talk_background_connection2_android" = "Je kunt vanaf nu de achtergrondverbinding in- en uitschakelen via \'Instellingen --> Meldingen\'.";
 
 

+ 4 - 4
deltachat-ios/pl.lproj/Localizable.strings

@@ -234,7 +234,7 @@
 // search
 "search" = "Szukaj";
 "search_explain" = "Wyszukaj czaty, kontakty i wiadomości";
-"search_no_result_for_x" = "Nie znaleziono wyników dla „%s";
+"search_no_result_for_x" = "Nie znaleziono wyników dla „%1$@";
 
 
 // create/edit groups, contact/group profile
@@ -307,8 +307,8 @@
 
 
 // preferences
-"pref_using_custom" = "Używanie niestandardowe: %s";
-"pref_using_default" = "Użyj domyślne: %s";
+"pref_using_custom" = "Używanie niestandardowe: %1$@";
+"pref_using_default" = "Użyj domyślne: %1$@";
 "pref_profile_info_headline" = "Twój profil";
 "pref_profile_photo" = "Zdjęcie profilowe";
 "pref_blocked_contacts" = "Zablokowane kontakty";
@@ -482,7 +482,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d nowe wiadomości w %2$d czatach";
 "notify_most_recent_from" = "Najnowsze z: %1$@";
-"notify_media_message_with_text" = "Wiadomość multimedialna: %s";
+"notify_media_message_with_text" = "Wiadomość multimedialna: %1$@";
 "notify_mark_all_read" = "Oznacz wszystkie jako przeczytane";
 "notify_mark_read" = "Oznacz jako przeczytane";
 "notify_media_message" = "Wiadomość multimedialna";

+ 4 - 4
deltachat-ios/pt-BR.lproj/Localizable.strings

@@ -220,7 +220,7 @@
 // search
 "search" = "Procurar";
 "search_explain" = "Procurar conversas, contatos e mensagens";
-"search_no_result_for_x" = "Nada relativo a \"%s\"";
+"search_no_result_for_x" = "Nada relativo a \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -284,8 +284,8 @@
 
 
 // preferences
-"pref_using_custom" = "Usando personalização: %s";
-"pref_using_default" = "Usando padrão: %s";
+"pref_using_custom" = "Usando personalização: %1$@";
+"pref_using_default" = "Usando padrão: %1$@";
 "pref_profile_info_headline" = "Informações do seu perfil";
 "pref_profile_photo" = "Foto do perfil";
 "pref_blocked_contacts" = "Contatos bloqueados";
@@ -449,7 +449,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d novas mensagens em %2$d conversas";
 "notify_most_recent_from" = "Mais recentes de: %1$@";
-"notify_media_message_with_text" = "Mensagens de mídia: %s";
+"notify_media_message_with_text" = "Mensagens de mídia: %1$@";
 "notify_mark_all_read" = "Marcar todas como lidas";
 "notify_mark_read" = "Marcar como lida";
 "notify_media_message" = "Mensagem de mídia";

+ 4 - 4
deltachat-ios/pt-PT.lproj/Localizable.strings

@@ -160,7 +160,7 @@
 // search
 "search" = "Pesquisar";
 "search_explain" = "Pesquisar chats, contactos, emensagens";
-"search_no_result_for_x" = "Nenhum resultado encontrado para \"%s\"";
+"search_no_result_for_x" = "Nenhum resultado encontrado para \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -209,8 +209,8 @@
 // Translators: Title shown above a chat/contact list; the user selects the recipient of the messages he wants to forward to
 "forward_to" = "Reencaminhar ...";
 // preferences
-"pref_using_custom" = "Utilizando personalizado %s";
-"pref_using_default" = "Utilizando padrão: %s";
+"pref_using_custom" = "Utilizando personalizado %1$@";
+"pref_using_default" = "Utilizando padrão: %1$@";
 "pref_profile_info_headline" = "O seu perfil";
 "pref_profile_photo" = "Foto do perfil";
 "pref_blocked_contacts" = "Bloquear contactos";
@@ -357,7 +357,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d novas mensagens em %2$d chats";
 "notify_most_recent_from" = "Mais recentes de: %1$@";
-"notify_media_message_with_text" = "Mensagem de mídia: %s";
+"notify_media_message_with_text" = "Mensagem de mídia: %1$@";
 "notify_mark_all_read" = "Marcar tudo como lido";
 "notify_mark_read" = "Marcar lido";
 "notify_media_message" = "Mensagem de mídia";

+ 6 - 5
deltachat-ios/ru.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Поиск";
 "search_explain" = "Поиск чатов, контактов и сообщений";
-"search_no_result_for_x" = "Ничего не найдено по запросу «%s» ";
+"search_no_result_for_x" = "Ничего не найдено по запросу «%1$@» ";
 
 
 // create/edit groups, contact/group profile
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Использовать персонализованно: %s";
-"pref_using_default" = "Использовать по умолчанию: %s";
+"pref_using_custom" = "Использовать персонализованно: %1$@";
+"pref_using_default" = "Использовать по умолчанию: %1$@";
 "pref_profile_info_headline" = "Личный профиль";
 "pref_profile_photo" = "Фото профиля";
 "pref_blocked_contacts" = "Заблокированные контакты";
@@ -423,7 +423,7 @@
 "pref_background_custom_image" = "Пользовательское изображение";
 "pref_background_custom_color" = "Пользовательский цвет";
 // disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable
-"pref_reliable_service" = "Надежное фоновое соединение";
+"pref_reliable_service" = "Надёжное фоновое соединение";
 "pref_reliable_service_explain" = "Требует постоянного уведомления";
 
 
@@ -524,7 +524,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d новых сообщений в %2$d чатах.";
 "notify_most_recent_from" = "Последнее от: %1$@";
-"notify_media_message_with_text" = "Медиа-сообщение: %s";
+"notify_media_message_with_text" = "Медиа-сообщение: %1$@";
 "notify_mark_all_read" = "Отметить всё как прочитанное";
 "notify_mark_read" = "Отметить как прочитанное";
 "notify_media_message" = "Медиа-сообщение";
@@ -643,5 +643,6 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "Как вы уже могли заметить, система теперь отображает уведомление «Соединение в фоновом режиме включено».\n\n👉 Это уведомление предотвращает остановку соединения между Delta Chat и вашим сервером операционной системой.\n\n👉 Если уведомление исчезает без каких-либо действий с вашей стороны, значит соединение все равно было остановлено\nЕсли вы считаете, что это странно — мы полностью согласны — но многие производители телефонов требуют именно этого. Сайт https://dontkillmyapp.com показывает некоторые обходные пути.\n\nТем не менее, мы рады, что нам удалось улучшить доставку сообщений в фоне с помощью этого изменения и удовлетворить пожелания многих пользователей — спасибо за сообщения об ошибках. 🤗";
+"device_talk_background_connection2_android" = "Теперь вы можете включать и отключать «Фоновое соединение» по мере необходимости в «Настройках» → «Уведомления».";
 
 

+ 5 - 4
deltachat-ios/sq.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Kërko";
 "search_explain" = "Kërkoni për fjalosje, kontakte dhe mesazhe.";
-"search_no_result_for_x" = "S\’u gjetën përfundime për \"%s\"";
+"search_no_result_for_x" = "S\’u gjetën përfundime për \"%1$@\"";
 
 
 // create/edit groups, contact/group profile
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Po përdoret vetjak: %s";
-"pref_using_default" = "Po përdoret parazgjedhje: %s";
+"pref_using_custom" = "Po përdoret vetjak: %1$@";
+"pref_using_default" = "Po përdoret parazgjedhje: %1$@";
 "pref_profile_info_headline" = "Të dhëna tuajat të profilit";
 "pref_profile_photo" = "Foto profili";
 "pref_blocked_contacts" = "Kontakte të bllokuar";
@@ -523,7 +523,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d mesazhe të rinj në %2$d fjalosje";
 "notify_most_recent_from" = "Më të rejat nga: %1$@";
-"notify_media_message_with_text" = "Mesazh media: %s";
+"notify_media_message_with_text" = "Mesazh media: %1$@";
 "notify_mark_all_read" = "Vëru shenjë të tërave si të lexuar";
 "notify_mark_read" = "Vëri shenjë si i lexuar";
 "notify_media_message" = "Mesazh media";
@@ -642,5 +642,6 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "Mund të keni vënë re tashmë se ka një ndihmëz \"Lidhje në prapaskenë e aktivizuar\" shfaqur nga sistemi.\n\n👉 Normalisht ndihmëza shërben për te penguar sistemin operativ të asgjësojë lidhjen mes Delta Chat-it dhe shërbyesin tuaj.\n\n👉 Nëse ndihmëza zhduket pa ndonjë veprim nga ana juaj, lidhja ka mundësi të jetë asgjësuar.\nNëse kjo ju duket e çuditshme - pajtohemi me ju plotësisht - por prodhuesit e telefonave bëjnë pikërisht këtë. Sajti https://dontkillmyapp.com tregon disa zgjidhje prej halli.\n\nSidoqoftë, jemi të lumtur që me këtë ndryshim mund të përmirësojmë marrjen e mesazheve në prapaskenë dhe mund të plotësojmë kërkesat e mjaft përdoruesve - faleminderit që e keni kërkuar 🤗";
+"device_talk_background_connection2_android" = "Tanimë mund të aktivizoni dhe çaktivizoni \"Lidhje në prapaskenë\" sipas nevojës, te \"Rregullime / Njoftime\".";
 
 

+ 9 - 8
deltachat-ios/sv.lproj/Localizable.strings

@@ -127,7 +127,7 @@
 "menu_forward" = "Vidarebefordra meddelande";
 "menu_resend" = "Skicka om meddelandet";
 "menu_reply" = "Svara på meddelandet";
-"menu_mute" = "Stäng av aviseringar";
+"menu_mute" = "Stäng av avisering";
 "menu_unmute" = "Slå på";
 "menu_export_attachment" = "Exportera bilaga";
 "menu_all_media" = "All media";
@@ -191,7 +191,7 @@
 "ask_delete_contacts" = "Ta bort kontakter? Detta kommer att ta bort de valda kontakterna permanent.\n\nKontakter med pågående chattar och kontakter från systemets adressbok kan inte tas bort permanent.";
 "ask_delete_contact" = "Ta bort kontakten %1$@?\n\nKontakter med pågående chattar och kontakter från systemets adressbok kan inte tas bort permanent. ";
 "cannot_delete_contacts_in_use" = "Det går inte att ta bort kontakter med pågående chattar.";
-"ask_start_chat_with" = "Chatta med%1$@ ?";
+"ask_start_chat_with" = "Chatta med %1$@ ?";
 // Translators: %1$s will be replaces by a comma separated list of names
 "ask_remove_members" = "Ta bort %1$@ från gruppen?";
 "info_outdated_app_title" = "Din appversion är för gammal.";
@@ -240,7 +240,7 @@
 // search
 "search" = "Sök";
 "search_explain" = "Sök efter chattar, kontakter och meddelanden";
-"search_no_result_for_x" = "Inga resultat hittades för \" %s \"";
+"search_no_result_for_x" = "Inga resultat hittades för \" %1$@ \"";
 
 
 // create/edit groups, contact/group profile
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Använder anpassat: %s";
-"pref_using_default" = "Använder standard: %s";
+"pref_using_custom" = "Använder anpassat: %1$@";
+"pref_using_default" = "Använder standard: %1$@";
 "pref_profile_info_headline" = "Din profilinformation";
 "pref_profile_photo" = "Profilbild";
 "pref_blocked_contacts" = "Blockerade kontakter";
@@ -348,7 +348,7 @@
 // Translators: The wording must indicate that we can't guarantee that, its a System flag that we set. But the System in question must honor it.
 "pref_screen_security_explain" = "Blockera skärmklipp i tidigare-listan samt inuti programmet";
 "pref_screen_security_please_restart_hint" = "Starta om programmet för att tillämpa skärmsäkerhetsinställningarna";
-"pref_notifications" = "Aviseringar";
+"pref_notifications" = "Avisering";
 "pref_notifications_show" = "Visa";
 "pref_notifications_priority" = "Prioritet";
 "pref_led_color" = "Färg på ljusindikator";
@@ -424,7 +424,7 @@
 "pref_background_custom_color" = "Anpassad färg";
 // disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable
 "pref_reliable_service" = "Tillförlitlig bakgrundsanslutning";
-"pref_reliable_service_explain" = "Kräver en permanent avisering";
+"pref_reliable_service_explain" = "Kräver permanent avisering";
 
 
 // automatically delete message
@@ -524,7 +524,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d nya meddelanden i %2$d chattar";
 "notify_most_recent_from" = "Senast från: %1$@";
-"notify_media_message_with_text" = "Mediameddelande: %s";
+"notify_media_message_with_text" = "Mediameddelande: %1$@";
 "notify_mark_all_read" = "Markera alla som lästa";
 "notify_mark_read" = "Läst";
 "notify_media_message" = "Multimediameddelande";
@@ -643,5 +643,6 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "Du kanske redan har märkt att det finns ett tips, \"Bakgrundsanslutning aktiverad\" som visas av systemet.\n\n👉 Tipset förhindrar normalt att operativsystemet dödar anslutningen mellan Delta Chat och din server.\n\n👉 Om tipset försvinner utan någon åtgärd från din sida, har anslutningen förmodligen dödats ändå.\nOm du tycker att detta är konstigt, är vi helt överens men många tillverkare gör just så. Webbplatsen https://dontkillmyapp.com visar några lösningar.\n\nVi är dock glada att vi kunde förbättra mottagandet av meddelanden i bakgrunden, med denna förändring, och att vi kunde uppfylla önskemålen från många användare. Tack för rapporteringen! 🤗";
+"device_talk_background_connection2_android" = "Nu kan du aktivera och avaktivera \"Bakgrundsanslutning\" efter behov, i \"Inställningar / Avisering\".";
 
 

+ 6 - 5
deltachat-ios/tr.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "Ara";
 "search_explain" = "Sohbetleri, kişileri ve iletileri ara";
-"search_no_result_for_x" = "\"%s\" için sonuç bulunamadı";
+"search_no_result_for_x" = "\"%1$@\" için sonuç bulunamadı";
 
 
 // create/edit groups, contact/group profile
@@ -267,7 +267,7 @@
 
 
 // welcome and login
-"welcome_intro1_message" = "Dünyanın en geniş kitleli ulağı. Özgür ve bağımsızdır.";
+"welcome_intro1_message" = "Dünyanın en geniş kitleli ulağı. Özgür ve bağımsız.";
 "welcome_start_messaging" = "İletileşmeye başla";
 "login_title" = "Oturum aç";
 "login_header" = "Sunucunuzda oturum açın";
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "Özel kullanılıyor: %s";
-"pref_using_default" = "Varsayılan kullanılıyor: %s";
+"pref_using_custom" = "Özel kullanılıyor: %1$@";
+"pref_using_default" = "Varsayılan kullanılıyor: %1$@";
 "pref_profile_info_headline" = "Profil bilginiz";
 "pref_profile_photo" = "Profil resmi";
 "pref_blocked_contacts" = "Engellenen kişiler";
@@ -524,7 +524,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%2$d sohbette %1$d yeni ileti";
 "notify_most_recent_from" = "Şundan en yeni: %1$@";
-"notify_media_message_with_text" = "Ortam iletisi: %s";
+"notify_media_message_with_text" = "Ortam iletisi: %1$@";
 "notify_mark_all_read" = "Tümünü okundu olarak imle";
 "notify_mark_read" = "Okundu imi";
 "notify_media_message" = "Ortam iletisi";
@@ -643,5 +643,6 @@
 // android specific strings, developers: please take care to remove strings that are no longer used!
 // this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
 "device_talk_background_connection_android" = "Sistem tarafından gösterilen bir \"Arka plan bağlantısı etkinleştirildi\" ipucu olduğunu zaten fark etmiş olabilirsiniz.\n\n👉 İpucu, normal olarak işletim sisteminin Delta Chat ve sunucunuz arasındaki bağlantıyı öldürmesini önler.\n\n👉 İpucu, tarafınızda herhangi bir eylem olmadan kaybolursa, bağlantı belki de öldürülmüştür.\nBunun olmaması gerektiğini düşünüyorsanız, genelde buna katılırız - ama çoğu üretici tam olarak bunu yapar. https://dontkillmyapp.com sitesi, bazı geçici çözümleri gösterir.\n\nBununla birlikte, bu değişiklikle arka planda iletilerin alınmasını iyileştirebildiğimiz ve çoğu kullanıcının isteklerini yerine getirebildiğimiz için mutluyuz - raporlama için teşekkürler 🤗";
+"device_talk_background_connection2_android" = "Artık \"Ayarlar / Bildirimler\"den \"Arka plan bağlantısı\"nı gerektiğinde etkinleştirebilir ve etkisizleştirebilirsiniz.";
 
 

+ 4 - 4
deltachat-ios/uk.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 // search
 "search" = "Пошук";
 "search_explain" = "Пошук чатів, контактів і повідомлень";
-"search_no_result_for_x" = "Запит «%s» не дав результатів";
+"search_no_result_for_x" = "Запит «%1$@» не дав результатів";
 
 
 // create/edit groups, contact/group profile
@@ -205,8 +205,8 @@
 // Translators: Title shown above a chat/contact list; the user selects the recipient of the messages he wants to forward to
 "forward_to" = "Переслати...";
 // preferences
-"pref_using_custom" = "Використовувати персоналізовано: %s";
-"pref_using_default" = "Використовувати за замовчуванням: %s";
+"pref_using_custom" = "Використовувати персоналізовано: %1$@";
+"pref_using_default" = "Використовувати за замовчуванням: %1$@";
 "pref_profile_info_headline" = "Ваш профіль";
 "pref_profile_photo" = "Фото профілю";
 "pref_blocked_contacts" = "Заблоковані контакти";
@@ -355,7 +355,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%1$d нових повідомлень з %2$d чатів";
 "notify_most_recent_from" = "Останнє від: %1$@";
-"notify_media_message_with_text" = "Медіа-повідомлення: %s";
+"notify_media_message_with_text" = "Медіа-повідомлення: %1$@";
 "notify_mark_all_read" = "Позначити все як прочитане";
 "notify_mark_read" = "Позначити прочитаним";
 "notify_media_message" = "Медіа-повідомлення";

+ 3 - 3
deltachat-ios/zh-Hant-TW.lproj/Localizable.strings

@@ -192,7 +192,7 @@
 // search
 "search" = "搜尋";
 "search_explain" = "搜尋對話紀錄、聯絡人以及訊息";
-"search_no_result_for_x" = "找不到 %s";
+"search_no_result_for_x" = "找不到 %1$@";
 
 
 // create/edit groups, contact/group profile
@@ -256,8 +256,8 @@
 
 
 // preferences
-"pref_using_custom" = "使用自訂值: %s";
-"pref_using_default" = "使用預設值: %s";
+"pref_using_custom" = "使用自訂值: %1$@";
+"pref_using_default" = "使用預設值: %1$@";
 "pref_profile_info_headline" = "你的個人資料";
 "pref_profile_photo" = "大頭照";
 "pref_blocked_contacts" = "已封鎖的聯絡人";

+ 10 - 4
deltachat-ios/zh-Hant.lproj/Localizable.strings

@@ -240,7 +240,7 @@
 // search
 "search" = "搜索";
 "search_explain" = "搜索聊天、联系人和消息";
-"search_no_result_for_x" = "没有找到有关\"%s\"的结果";
+"search_no_result_for_x" = "没有找到有关\"%1$@\"的结果";
 
 
 // create/edit groups, contact/group profile
@@ -320,8 +320,8 @@
 
 
 // preferences
-"pref_using_custom" = "使用自定义: %s";
-"pref_using_default" = "使用默认: %s";
+"pref_using_custom" = "使用自定义: %1$@";
+"pref_using_default" = "使用默认: %1$@";
 "pref_profile_info_headline" = "您的个人资料";
 "pref_profile_photo" = "个人资料图片";
 "pref_blocked_contacts" = "已屏蔽联系人";
@@ -524,7 +524,7 @@
 // notifications 
 "notify_n_messages_in_m_chats" = "%2$d 个聊天中有 %1$d 条新消息";
 "notify_most_recent_from" = "最新来自: %1$@";
-"notify_media_message_with_text" = "媒体消息: %s";
+"notify_media_message_with_text" = "媒体消息: %1$@";
 "notify_mark_all_read" = "将所有标记为已读";
 "notify_mark_read" = "标记为已读";
 "notify_media_message" = "媒体消息";
@@ -640,3 +640,9 @@
 // iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings"
 
 
+// android specific strings, developers: please take care to remove strings that are no longer used!
+// this message is shown in the device chat, starting in version 1.6, it should explain the need for the permanent-notifiation and also use the same wording as used there (see "Background connection enabled")
+"device_talk_background_connection_android" = "您可能已经注意到了,系统显示了“后台连接已启用”的提示。\n\n👉通常,该提示可防止操作系统终止 Delta Chat 与您的服务器之间的连接。\n\n👉如果您没有采取任何行动而提示消失了,则连接可能已被终止。\n如果您认为这很奇怪,我们完全同意——但许多制造商确实是这么做的。网站 https://dontkillmyapp.com 给出了一些解决办法。\n\n不过,我们很高兴可以通过此更改改善后台的消息接收并能满足许多用户的请求——感谢您的报告🤗";
+"device_talk_background_connection2_android" = "现在,您可以根据需要在“设置/通知”中启用或禁用“后台连接”。";
+
+

+ 16 - 7
tools/convertTranslations.js

@@ -21,13 +21,22 @@ function parseAndroid(data) {
   for (let line of lines) {
     let kv = line.match(rgxKeyValue);
     if (kv != null) {
-      result.parsed.push([kv[1], kv[2].
-        replace(/([^\\])(")/g, '$1\\$2').
-        replace(/&quot;/g, '\\"').
-        replace(/&lt;/g, '<').
-        replace(/&gt;/g, '>').
-        replace(/&amp;/g, '&').
-        replace(/\$s/ig, '$@')])
+      value = kv[2].
+      replace(/([^\\])(")/g, '$1\\$2').
+      replace(/&quot;/g, '\\"').
+      replace(/&lt;/g, '<').
+      replace(/&gt;/g, '>').
+      replace(/&amp;/g, '&').
+      replace(/\$s/ig, '$@').
+      replace(/\%s/ig, '%1$@')
+
+      let countOfPlaceholders = (value.match(/\%1\$\@/g) || []).length
+      if (countOfPlaceholders > 1) {
+        console.error("\n\n\n ERROR: Placeholder mismatch. A source file contained '%s' and '%1$s' in the same resource which we are not willing to fix automatically. Please fix the input source on tranisfex first! \n\n\n")
+        continue;
+      }
+
+      result.parsed.push([kv[1], value])
       continue;
     }