]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Remove AsyncTask from SSLCertificateErrorDialog. https://redmine.stoutner.com/issues/987
authorSoren Stoutner <soren@stoutner.com>
Wed, 29 Mar 2023 21:45:22 +0000 (14:45 -0700)
committerSoren Stoutner <soren@stoutner.com>
Wed, 29 Mar 2023 21:45:22 +0000 (14:45 -0700)
30 files changed:
app/src/main/assets/de/about_changelog.html
app/src/main/assets/en/about_changelog.html
app/src/main/assets/es/about_changelog.html
app/src/main/assets/fr/about_changelog.html
app/src/main/assets/it/about_changelog.html
app/src/main/assets/pt-rBR/about_changelog.html
app/src/main/assets/ru/about_changelog.html
app/src/main/assets/tr/about_changelog.html
app/src/main/assets/zh-rCN/about_changelog.html
app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksDatabaseViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/adapters/PinnedMismatchPagerAdapter.kt
app/src/main/java/com/stoutner/privacybrowser/coroutines/GetHostIpAddressesCoroutine.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/HttpAuthenticationDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/SslCertificateErrorDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/AboutVersionFragment.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/WebViewTabFragment.kt
app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.kt
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-fr/strings.xml
app/src/main/res/values-it/strings.xml
app/src/main/res/values-pt-rBR/strings.xml
app/src/main/res/values-ru/strings.xml
app/src/main/res/values-tr/strings.xml
app/src/main/res/values-zh-rCN/strings.xml
app/src/main/res/values/strings.xml

index 761c5cd03190c9e18894adec91e94f0ed1c81f18..5ee5088db0ee70ebb851b80d1be019a37e0def5f 100644 (file)
@@ -33,8 +33,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (Version Code 68)</h3>
-        <p>27. März 2023 - Mindest-API 24, Ziel-API 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (Version Code 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27. März 2023</a> - Mindest-API 24, Ziel-API 33</p>
         <ul>
             <li>Problem mit gelegentlich bei Neustarts auftretenden <a href="https://redmine.stoutner.com/issues/981">Abstürzen</a>, die durch eine in Version 3.13.3.
                 <a href="https://redmine.stoutner.com/issues/963">Fehlerbehebung</a> verursacht wurden, behoben.</li>
index 53bac9590c4b34fd905851ea217d508f44b408f2..343605dce400e9ebdfa6ccb4bdaec838f022d2bd 100644 (file)
@@ -27,8 +27,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (version code 68)</h3>
-        <p>27 March 2023 - minimum API 24, target API 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (version code 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27 March 2023</a> - minimum API 24, target API 33</p>
         <ul>
             <li>Fix an <a href="https://redmine.stoutner.com/issues/981">intermittent crash</a> on restart caused by the
                 <a href="https://redmine.stoutner.com/issues/963">race condition fix</a> introduced in 3.13.3.</li>
index c36ded657c3526c2fd10ff9efa8538dacaf6242d..a7bf2b73288091c0cc23410d41eb6b654f94dc29 100644 (file)
@@ -29,8 +29,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (código de versión 68)</h3>
-        <p>27 de marzo de 2023 - API mínimo 24, API objetivo 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (código de versión 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27 de marzo de 2023</a> - API mínimo 24, API objetivo 33</p>
         <ul>
             <li>Corregir una <a href="https://redmine.stoutner.com/issues/981">caída intermitente</a> en el reinicio causada por la
                 <a href="https://redmine.stoutner.com/issues/963">corrección de la condición de carrera</a> introducida en 3.13.3.</li>
index b4e93cb62a0be3749ca6de5713bea9fb5b4888b3..12287c6202fc96716092e064879ea994778d08c1 100644 (file)
@@ -29,8 +29,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (version du code 68)</h3>
-        <p>27 Mars 2023 - API minimale : 24, API optimale : 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (version du code 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27 Mars 2023</a> - API minimale : 24, API optimale : 33</p>
         <ul>
             <li>Fix an <a href="https://redmine.stoutner.com/issues/981">intermittent crash</a> on restart caused by the
                 <a href="https://redmine.stoutner.com/issues/963">race condition fix</a> introduced in 3.13.3.</li>
index 0b7ad82ee96dee771d72b4e3df58bf448ae3fe53..42a2839355e3a58a34c2d8989b131bc5b2b6c92d 100644 (file)
@@ -29,8 +29,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (versione codice 68)</h3>
-        <p>27 Marzo 2023 - minima API 24, target API 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (versione codice 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27 Marzo 2023</a> - minima API 24, target API 33</p>
         <ul>
             <li>Correzione di un <a href="https://redmine.stoutner.com/issues/981">crash intermittente</a> al riavvio provocato da una
                 <a href="https://redmine.stoutner.com/issues/963">correzione per una "situazione di corsa"</a> introdotta nella versione 3.13.3.</li>
index 87370f182f3421fccdcb11f8dd9118c32b8c1eb3..822ceb5845641d8a3eb9011d85692eb3235b0cf4 100644 (file)
@@ -29,8 +29,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (código de versão 68)</h3>
-        <p>27 March 2023 - API mínimo 24, API alvo 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (código de versão 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27 March 2023</a> - API mínimo 24, API alvo 33</p>
         <ul>
             <li>Fix an <a href="https://redmine.stoutner.com/issues/981">intermittent crash</a> on restart caused by the
                 <a href="https://redmine.stoutner.com/issues/963">race condition fix</a> introduced in 3.13.3.</li>
index e89af949038f30b6a1e79e12aa7276e503d80bcb..e81929045a0620225a263d88e8a97a998c8c4c53 100644 (file)
@@ -27,8 +27,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (код версии 68)</h3>
-        <p>27 мая 2023 года - минимальный API 24, целевой API 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (код версии 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27 мая 2023 года</a> - минимальный API 24, целевой API 33</p>
         <ul>
             <li>Исправлен <a href="https://redmine.stoutner.com/issues/981">сбой, периодически</a> возникавший после
                 <a href="https://redmine.stoutner.com/issues/963">устранения состояния гонки</a> в версии 3.13.3.</li>
index fe6aa8f25befd9f83d9c2c863a3dfe0a47becba5..a4910545ec24c2610c3e0c6541b928d8d0ddb554 100644 (file)
@@ -27,8 +27,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (version code 68)</h3>
-        <p>27 Mart 2023 - minimum API 24, target API 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (version code 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27 Mart 2023</a> - minimum API 24, target API 33</p>
         <ul>
             <li>Fix an <a href="https://redmine.stoutner.com/issues/981">intermittent crash</a> on restart caused by the
                 <a href="https://redmine.stoutner.com/issues/963">race condition fix</a> introduced in 3.13.3.</li>
index 970caf2a61187e818269a06754c6dec7e70a53f4..6b67b5b504997bf5e0cef5881815108b8c3c6912 100644 (file)
@@ -29,8 +29,8 @@
     </head>
 
     <body>
-        <h3>3.13.4 (version code 68)</h3>
-        <p>27 March 2023 - 最低支持API 24, 最高支持API 33</p>
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13-4/">3.13.4</a> (version code 68)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7ab6a9027175e6a8f72b3f3683f8c4e05643d8bc">27 March 2023</a> - 最低支持API 24, 最高支持API 33</p>
         <ul>
             <li>修复由3.13.3引入的<a href="https://redmine.stoutner.com/issues/981">race condition fix</a> 导致的<a href="https://redmine.stoutner.com/issues/963">频繁崩溃</a>。</li>
             <li>增加<a href="https://redmine.stoutner.com/issues/962">黑白图标</a>选项。</li>
index 985414faa1a6706b1dbc2dee966ddd0b8784fd32..8c14b0ef3fea8db6387d85bcdb2b9c2f389aa359 100644 (file)
@@ -287,7 +287,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
                     // Adjust the ActionMode and the menu according to the number of selected bookmarks.
                     if (numberOfSelectedBookmarks == 1) {  // One bookmark is selected.
                         // List the number of selected bookmarks in the subtitle.
-                        mode.setSubtitle(getString(R.string.selected) + "  1");
+                        mode.setSubtitle(getString(R.string.selected) + "1");
 
                         // Show the `Move Up`, `Move Down`, and  `Edit` options.
                         moveBookmarkUpMenuItem.setVisible(true);
@@ -298,7 +298,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
                         updateMoveIcons();
                     } else {  // More than one bookmark is selected.
                         // List the number of selected bookmarks in the subtitle.
-                        mode.setSubtitle(getString(R.string.selected) + "  " + numberOfSelectedBookmarks);
+                        mode.setSubtitle(getString(R.string.selected) + numberOfSelectedBookmarks);
 
                         // Hide non-applicable `MenuItems`.
                         moveBookmarkUpMenuItem.setVisible(false);
@@ -504,7 +504,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
                     bookmarksCursorAdapter.changeCursor(bookmarksCursor);
 
                     // Create a Snackbar with the number of deleted bookmarks.
-                    bookmarksDeletedSnackbar = Snackbar.make(findViewById(R.id.bookmarks_coordinatorlayout), getString(R.string.bookmarks_deleted) + "  " + numberOfBookmarksToDelete,
+                    bookmarksDeletedSnackbar = Snackbar.make(findViewById(R.id.bookmarks_coordinatorlayout), getString(R.string.bookmarks_deleted) + numberOfBookmarksToDelete,
                             Snackbar.LENGTH_LONG)
                             .setAction(R.string.undo, view -> {
                                 // Do nothing because everything will be handled by `onDismissed()` below.
index 11aa500d6138ec1693b0c8877334365216105612..2309a56ba82a7acd703ed1d22a22744347c9b9b2 100644 (file)
@@ -429,7 +429,7 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements
                     int numberOfSelectedBookmarks = bookmarksListView.getCheckedItemCount();
 
                     // Set the action mode subtitle according to the number of selected bookmarks.  This must be set here or it will be missing if the activity is restarted.
-                    mode.setSubtitle(getString(R.string.selected) + "  " + numberOfSelectedBookmarks);
+                    mode.setSubtitle(getString(R.string.selected) + numberOfSelectedBookmarks);
 
                     // Do not show the select all menu item if all the bookmarks are already checked.
                     if (bookmarksListView.getCheckedItemCount() == bookmarksListView.getCount()) {
@@ -454,7 +454,7 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements
                     // Only run the commands if at least one bookmark is selected.  Otherwise, a context menu with 0 selected bookmarks is briefly displayed.
                     if (numberOfSelectedBookmarks > 0) {
                         // Update the action mode subtitle according to the number of selected bookmarks.
-                        mode.setSubtitle(getString(R.string.selected) + "  " + numberOfSelectedBookmarks);
+                        mode.setSubtitle(getString(R.string.selected) + numberOfSelectedBookmarks);
 
                         // Only show the select all menu item if all of the bookmarks are not already selected.
                         selectAllMenuItem.setVisible(bookmarksListView.getCheckedItemCount() != bookmarksListView.getCount());
@@ -567,7 +567,7 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements
 
                         // Create a Snackbar with the number of deleted bookmarks.
                         bookmarksDeletedSnackbar = Snackbar.make(findViewById(R.id.bookmarks_databaseview_coordinatorlayout),
-                                        getString(R.string.bookmarks_deleted) + "  " + selectedBookmarksIdsLongArray.length, Snackbar.LENGTH_LONG)
+                                        getString(R.string.bookmarks_deleted) + selectedBookmarksIdsLongArray.length, Snackbar.LENGTH_LONG)
                                 .setAction(R.string.undo, view -> {
                                     // Do nothing because everything will be handled by `onDismissed()` below.
                                 })
index 91c3a71ebbaa125590debe2d2bbf99ead47a0e2f..229ab3b6392233e6c9737fd797c88b967c81a3c5 100644 (file)
@@ -2621,7 +2621,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                         startActivity(emailIntent);
                     } catch (ActivityNotFoundException exception) {
                         // Display a snackbar.
-                        Snackbar.make(currentWebView, getString(R.string.error) + "  " + exception, Snackbar.LENGTH_INDEFINITE).show();
+                        Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
                     }
 
                     // Consume the event.
@@ -2950,7 +2950,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 currentWebView.loadUrl(temporaryMhtFile.toString());
             } catch (Exception exception) {
                 // Display a snackbar.
-                Snackbar.make(currentWebView, getString(R.string.error) + "  " + exception, Snackbar.LENGTH_INDEFINITE).show();
+                Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
             }
         } else {  // Let the WebView handle opening of the file.
             // Open the file.
@@ -4326,7 +4326,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             startActivity(openWithAppIntent);
         } catch (ActivityNotFoundException exception) {  // There are no apps available to open the URL.
             // Show a snackbar with the error.
-            Snackbar.make(currentWebView, getString(R.string.error) + "  " + exception, Snackbar.LENGTH_INDEFINITE).show();
+            Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
         }
     }
 
@@ -4346,7 +4346,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             startActivity(openWithBrowserIntent);
         } catch (ActivityNotFoundException exception) {  // There are no browsers available to open the URL.
             // Show a snackbar with the error.
-            Snackbar.make(currentWebView, getString(R.string.error) + "  " + exception, Snackbar.LENGTH_INDEFINITE).show();
+            Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
         }
     }
 
@@ -5382,7 +5382,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                         startActivity(emailIntent);
                     } catch (ActivityNotFoundException exception) {
                         // Display a snackbar.
-                        Snackbar.make(currentWebView, getString(R.string.error) + "  " + exception, Snackbar.LENGTH_INDEFINITE).show();
+                        Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
                     }
 
 
@@ -5403,7 +5403,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                         startActivity(dialIntent);
                     } catch (ActivityNotFoundException exception) {
                         // Display a snackbar.
-                        Snackbar.make(currentWebView, getString(R.string.error) + "  " + exception, Snackbar.LENGTH_INDEFINITE).show();
+                        Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
                     }
 
                     // Returning true indicates Privacy Browser is handling the URL by creating an intent.
@@ -5425,7 +5425,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     try {
                         startActivity(genericIntent);
                     } catch (ActivityNotFoundException exception) {
-                        Snackbar.make(nestedScrollWebView, getString(R.string.unrecognized_url) + "  " + url, Snackbar.LENGTH_SHORT).show();
+                        Snackbar.make(nestedScrollWebView, getString(R.string.unrecognized_url) + url, Snackbar.LENGTH_SHORT).show();
                     }
 
                     // Returning true indicates Privacy Browser is handling the URL by creating an intent.
@@ -5852,7 +5852,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
                 if ((currentDomainName != null) && !currentDomainName.isEmpty()) {
                     // Get the IP addresses for the current URI.
-                    GetHostIpAddressesCoroutine.getAddresses(currentDomainName, nestedScrollWebView, getSupportFragmentManager(), getString(R.string.pinned_mismatch));
+                    GetHostIpAddressesCoroutine.checkPinnedMismatch(currentDomainName, nestedScrollWebView, getSupportFragmentManager(), getString(R.string.pinned_mismatch));
                 }
 
                 // Replace Refresh with Stop if the options menu has been created.  (The first WebView typically begins loading before the menu items are instantiated.)
index 6cf5485b32f86dd28ffe4cf8270f70b402330853..569652ca5b4174f3f57b2d50c3307b9b8182d0c2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2021-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -90,13 +90,13 @@ class PinnedMismatchPagerAdapter(private val context: Context, private val layou
         val endDateTextView = tabLayout.findViewById<TextView>(R.id.end_date)
 
         // Setup the labels.
-        val domainNameLabel = context.getString(R.string.domain_label) + "  "
-        val ipAddressesLabel = context.getString(R.string.ip_addresses) + "  "
-        val cNameLabel = context.getString(R.string.common_name) + "  "
-        val oNameLabel = context.getString(R.string.organization) + "  "
-        val uNameLabel = context.getString(R.string.organizational_unit) + "  "
-        val startDateLabel = context.getString(R.string.start_date) + "  "
-        val endDateLabel = context.getString(R.string.end_date) + "  "
+        val domainNameLabel = context.getString(R.string.domain_label)
+        val ipAddressesLabel = context.getString(R.string.ip_addresses)
+        val cNameLabel = context.getString(R.string.common_name)
+        val oNameLabel = context.getString(R.string.organization)
+        val uNameLabel = context.getString(R.string.organizational_unit)
+        val startDateLabel = context.getString(R.string.start_date)
+        val endDateLabel = context.getString(R.string.end_date)
 
         // Convert the URL to a URI.
         val currentUri = Uri.parse(nestedScrollWebView.url)
index 985bc506c0c2229a0fc4024f78a3481c1b454715..4d3ed5ba2166b7589eb2283cc2d7805ba198d4a7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019,2021-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2019,2021-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
 
 package com.stoutner.privacybrowser.coroutines
 
+import android.text.SpannableStringBuilder
+import android.text.Spanned
+import android.text.style.ForegroundColorSpan
+import android.widget.TextView
+
 import androidx.fragment.app.FragmentManager
+
 import com.stoutner.privacybrowser.helpers.CheckPinnedMismatchHelper
 import com.stoutner.privacybrowser.views.NestedScrollWebView
 
@@ -33,8 +39,50 @@ import java.net.InetAddress
 import java.net.UnknownHostException
 
 object GetHostIpAddressesCoroutine {
+    fun getAddresses(domainName: String, ipAddressesLabel: String, blueColorSpan: ForegroundColorSpan, ipAddressesTextView: TextView) {
+        // Get the IP addresses using a coroutine.
+        CoroutineScope(Dispatchers.Main).launch {
+            // Get the IP addresses on the IO thread.
+            withContext(Dispatchers.IO) {
+                // Get an array with the IP addresses for the host.
+                try {
+                    // Initialize an IP address string builder.
+                    val ipAddressesStringBuilder = StringBuilder()
+
+                    // Get an array with all the IP addresses for the domain.
+                    val inetAddressesArray = InetAddress.getAllByName(domainName)
+
+                    // Add each IP address to the string builder.
+                    for (inetAddress in inetAddressesArray) {
+                        // Add a line break to the string builder if this is not the first IP address.
+                        if (ipAddressesStringBuilder.isNotEmpty()) {
+                            ipAddressesStringBuilder.append("\n")
+                        }
+
+                        // Add the IP address to the string builder.
+                        ipAddressesStringBuilder.append(inetAddress.hostAddress)
+                    }
+
+                    // Create a spannable string builder.
+                    val addressesStringBuilder = SpannableStringBuilder(ipAddressesLabel + ipAddressesStringBuilder)
+
+                    // Set the string builder to display the certificate information in blue.  `SPAN_INCLUSIVE_INCLUSIVE` allows the span to grow in either direction.
+                    addressesStringBuilder.setSpan(blueColorSpan, ipAddressesLabel.length, addressesStringBuilder.length, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
+
+                    // Populate the IP addresses text view on the UI thread.
+                    withContext(Dispatchers.Main) {
+                        // Populate the IP addresses text view.
+                        ipAddressesTextView.text = addressesStringBuilder
+                    }
+                } catch (exception: UnknownHostException) {
+                    // Do nothing.
+                }
+            }
+        }
+    }
+
     @JvmStatic
-    fun getAddresses(domainName: String, nestedScrollWebView: NestedScrollWebView, supportFragmentManager: FragmentManager, pinnedMismatchString: String) {
+    fun checkPinnedMismatch(domainName: String, nestedScrollWebView: NestedScrollWebView, supportFragmentManager: FragmentManager, pinnedMismatchString: String) {
         // Get the IP addresses using a coroutine.
         CoroutineScope(Dispatchers.Main).launch {
             // Get the IP addresses on the IO thread.
@@ -42,7 +90,7 @@ object GetHostIpAddressesCoroutine {
                 // Get an array with the IP addresses for the host.
                 try {
                     // Initialize an IP address string builder.
-                    val ipAddresses = StringBuilder()
+                    val ipAddressesStringBuilder = StringBuilder()
 
                     // Get an array with all the IP addresses for the domain.
                     val inetAddressesArray = InetAddress.getAllByName(domainName)
@@ -50,16 +98,16 @@ object GetHostIpAddressesCoroutine {
                     // Add each IP address to the string builder.
                     for (inetAddress in inetAddressesArray) {
                         // Add a line break to the string builder if this is not the first IP address.
-                        if (ipAddresses.isNotEmpty()) {
-                            ipAddresses.append("\n")
+                        if (ipAddressesStringBuilder.isNotEmpty()) {
+                            ipAddressesStringBuilder.append("\n")
                         }
 
                         // Add the IP address to the string builder.
-                        ipAddresses.append(inetAddress.hostAddress)
+                        ipAddressesStringBuilder.append(inetAddress.hostAddress)
                     }
 
                     // Store the IP addresses.
-                    nestedScrollWebView.currentIpAddresses = ipAddresses.toString()
+                    nestedScrollWebView.currentIpAddresses = ipAddressesStringBuilder.toString()
 
                     // Checked for pinned mismatches if there is pinned information and it is not ignored.  This must be done on the UI thread because checking the pinned mismatch interacts with the WebView.
                     withContext(Dispatchers.Main) {
index d7fe8f9bcbe767ccd2ffb37e33ea24cb2f81ef25..7866ff4891dd9b560f4d2f8331d706aeb787e8f3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2017-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2017-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -164,7 +164,7 @@ class HttpAuthenticationDialog : DialogFragment() {
             realmTextView.text = httpAuthRealm
 
             // Initialize the host label and the spannable string builder.
-            val hostLabel = getString(R.string.host) + "  "
+            val hostLabel = getString(R.string.host)
             val hostStringBuilder = SpannableStringBuilder(hostLabel + httpAuthHost)
 
             // Set the blue color span.
index 1090bedd2285244a368ada1b331059fa4f6c8eb5..e0b27230ca25f59e97e6bcd08bf37a495a01aead 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.app.Activity
 import android.app.Dialog
 import android.content.DialogInterface
 import android.net.Uri
 import android.net.http.SslError
-import android.os.AsyncTask
 import android.os.Bundle
 import android.text.SpannableStringBuilder
 import android.text.Spanned
@@ -38,11 +36,9 @@ import androidx.preference.PreferenceManager
 
 import com.stoutner.privacybrowser.R
 import com.stoutner.privacybrowser.activities.MainWebViewActivity
+import com.stoutner.privacybrowser.coroutines.GetHostIpAddressesCoroutine
 import com.stoutner.privacybrowser.views.NestedScrollWebView
 
-import java.lang.ref.WeakReference
-import java.net.InetAddress
-import java.net.UnknownHostException
 import java.text.DateFormat
 
 // Define the class constants.
@@ -186,15 +182,13 @@ class SslCertificateErrorDialog : DialogFragment() {
         // Get a URI for the URL with errors.
         val uriWithErrors = Uri.parse(urlWithErrors)
 
-        // Get the IP addresses for the URI.
-        GetIpAddresses(requireActivity(), alertDialog).execute(uriWithErrors.host)
-
         // The alert dialog must be shown before the contents can be modified.
         alertDialog.show()
 
         // Get handles for the views.
         val primaryErrorTextView = alertDialog.findViewById<TextView>(R.id.primary_error)!!
         val urlTextView = alertDialog.findViewById<TextView>(R.id.url)!!
+        val ipAddressesTextView = alertDialog.findViewById<TextView>(R.id.ip_addresses)!!
         val issuedToCNameTextView = alertDialog.findViewById<TextView>(R.id.issued_to_cname)!!
         val issuedToONameTextView = alertDialog.findViewById<TextView>(R.id.issued_to_oname)!!
         val issuedToUNameTextView = alertDialog.findViewById<TextView>(R.id.issued_to_uname)!!
@@ -206,13 +200,20 @@ class SslCertificateErrorDialog : DialogFragment() {
         val startDateTextView = alertDialog.findViewById<TextView>(R.id.start_date)!!
         val endDateTextView = alertDialog.findViewById<TextView>(R.id.end_date)!!
 
+        // Define the color spans.
+        val blueColorSpan = ForegroundColorSpan(requireContext().getColor(R.color.alt_blue_text))
+        val redColorSpan = ForegroundColorSpan(requireContext().getColor(R.color.red_text))
+
+        // Get the IP Addresses for the URI.
+        GetHostIpAddressesCoroutine.getAddresses(uriWithErrors.host!!, getString(R.string.ip_addresses), blueColorSpan, ipAddressesTextView)
+
         // Setup the common strings.
-        val urlLabel = getString(R.string.url_label) + "  "
-        val cNameLabel = getString(R.string.common_name) + "  "
-        val oNameLabel = getString(R.string.organization) + "  "
-        val uNameLabel = getString(R.string.organizational_unit) + "  "
-        val startDateLabel = getString(R.string.start_date) + "  "
-        val endDateLabel = getString(R.string.end_date) + "  "
+        val urlLabel = getString(R.string.url_label)
+        val cNameLabel = getString(R.string.common_name)
+        val oNameLabel = getString(R.string.organization)
+        val uNameLabel = getString(R.string.organizational_unit)
+        val startDateLabel = getString(R.string.start_date)
+        val endDateLabel = getString(R.string.end_date)
 
         // Create a spannable string builder for each text view that needs multiple colors of text.
         val urlStringBuilder = SpannableStringBuilder(urlLabel + urlWithErrors)
@@ -225,10 +226,6 @@ class SslCertificateErrorDialog : DialogFragment() {
         val startDateStringBuilder = SpannableStringBuilder(startDateLabel + startDate)
         val endDateStringBuilder = SpannableStringBuilder(endDateLabel + endDate)
 
-        // Define the color spans.
-        val blueColorSpan = ForegroundColorSpan(requireContext().getColor(R.color.alt_blue_text))
-        val redColorSpan = ForegroundColorSpan(requireContext().getColor(R.color.red_text))
-
         // Setup the spans to display the certificate information in blue.  `SPAN_INCLUSIVE_INCLUSIVE` allows the span to grow in either direction.
         urlStringBuilder.setSpan(blueColorSpan, urlLabel.length, urlStringBuilder.length, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
         issuedToCNameStringBuilder.setSpan(blueColorSpan, cNameLabel.length, issuedToCNameStringBuilder.length, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
@@ -315,80 +312,4 @@ class SslCertificateErrorDialog : DialogFragment() {
         // Return the alert dialog.
         return alertDialog
     }
-
-    // This must run asynchronously because it involves a network request.  `String` declares the parameters.  `Void` does not declare progress units.  `SpannableStringBuilder` contains the results.
-    private class GetIpAddresses constructor(activity: Activity, alertDialog: AlertDialog) : AsyncTask<String, Void?, SpannableStringBuilder>() {
-        // Define the weak references.
-        private val activityWeakReference: WeakReference<Activity> = WeakReference(activity)
-        private val alertDialogWeakReference: WeakReference<AlertDialog> = WeakReference(alertDialog)
-
-        @Deprecated("Deprecated in Java")
-        override fun doInBackground(vararg domainName: String): SpannableStringBuilder {
-            // Get handles for the activity and the alert dialog.
-            val activity = activityWeakReference.get()
-            val alertDialog = alertDialogWeakReference.get()
-
-            // Abort if the activity or the dialog is gone.
-            if (activity == null || activity.isFinishing || alertDialog == null) {
-                return SpannableStringBuilder()
-            }
-
-            // Initialize an IP address string builder.
-            val ipAddresses = StringBuilder()
-
-            // Get an array with the IP addresses for the host.
-            try {
-                // Get an array with all the IP addresses for the domain.
-                val inetAddressesArray = InetAddress.getAllByName(domainName[0])
-
-                // Add each IP address to the string builder.
-                for (inetAddress in inetAddressesArray) {
-                    // Check to see if this is not the first IP address.
-                    if (ipAddresses.isNotEmpty()) {
-                        // Add a line break to the string builder first.
-                        ipAddresses.append("\n")
-                    }
-
-                    // Add the IP Address to the string builder.
-                    ipAddresses.append(inetAddress.hostAddress)
-                }
-            } catch (exception: UnknownHostException) {
-                // Do nothing.
-            }
-
-            // Set the label.
-            val ipAddressesLabel = activity.getString(R.string.ip_addresses) + "  "
-
-            // Create a spannable string builder.
-            val ipAddressesStringBuilder = SpannableStringBuilder(ipAddressesLabel + ipAddresses)
-
-            // Create a blue color span according to the theme.
-            val blueColorSpan = ForegroundColorSpan(activity.getColor(R.color.alt_blue_text))
-
-            // Set the string builder to display the certificate information in blue.  `SPAN_INCLUSIVE_INCLUSIVE` allows the span to grow in either direction.
-            ipAddressesStringBuilder.setSpan(blueColorSpan, ipAddressesLabel.length, ipAddressesStringBuilder.length, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
-
-            // Return the formatted string.
-            return ipAddressesStringBuilder
-        }
-
-        // `onPostExecute()` operates on the UI thread.
-        @Deprecated("Deprecated in Java")
-        override fun onPostExecute(ipAddresses: SpannableStringBuilder) {
-            // Get handles for the activity and the alert dialog.
-            val activity = activityWeakReference.get()
-            val alertDialog = alertDialogWeakReference.get()
-
-            // Abort if the activity or the alert dialog is gone.
-            if (activity == null || activity.isFinishing || alertDialog == null) {
-                return
-            }
-
-            // Get a handle for the IP addresses text view.
-            val ipAddressesTextView = alertDialog.findViewById<TextView>(R.id.ip_addresses)!!
-
-            // Populate the IP addresses text view.
-            ipAddressesTextView.text = ipAddresses
-        }
-    }
 }
index 04cdad8dd3b292555970cacd612f6986a34d6831..5edaae6202bb2d6f618555357dc22b42039c2e19 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2016-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2016-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -229,13 +229,13 @@ class ViewSslCertificateDialog : DialogFragment() {
             val endDateTextView = alertDialog.findViewById<TextView>(R.id.end_date)!!
 
             // Setup the labels.
-            val domainLabel = getString(R.string.domain_label) + "  "
-            val ipAddressesLabel = getString(R.string.ip_addresses) + "  "
-            val cNameLabel = getString(R.string.common_name) + "  "
-            val oNameLabel = getString(R.string.organization) + "  "
-            val uNameLabel = getString(R.string.organizational_unit) + "  "
-            val startDateLabel = getString(R.string.start_date) + "  "
-            val endDateLabel = getString(R.string.end_date) + "  "
+            val domainLabel = getString(R.string.domain_label)
+            val ipAddressesLabel = getString(R.string.ip_addresses)
+            val cNameLabel = getString(R.string.common_name)
+            val oNameLabel = getString(R.string.organization)
+            val uNameLabel = getString(R.string.organizational_unit)
+            val startDateLabel = getString(R.string.start_date)
+            val endDateLabel = getString(R.string.end_date)
 
             // Create spannable string builders for each text view that needs multiple colors of text.
             val domainStringBuilder = SpannableStringBuilder(domainLabel + domainString)
index 079b2ac87b47c734fef26c33bc63be2e5cbe2ee2..2bac1522ca729b56807249a59438c7169a57796f 100644 (file)
@@ -276,35 +276,35 @@ class AboutVersionFragment : Fragment() {
 
         // Setup the labels.
         val version = getString(R.string.version_code, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)
-        val brandLabel = getString(R.string.brand) + "  "
-        val manufacturerLabel = getString(R.string.manufacturer) + "  "
-        val modelLabel = getString(R.string.model) + "  "
-        val deviceLabel = getString(R.string.device) + "  "
-        val bootloaderLabel = getString(R.string.bootloader) + "  "
-        val androidLabel = getString(R.string.android) + "  "
-        val buildLabel = getString(R.string.build) + "  "
-        val kernelLabel = getString(R.string.kernel) + "  "
-        val webViewVersionLabel = getString(R.string.webview_version) + "  "
-        appConsumedMemoryLabel = getString(R.string.app_consumed_memory) + "  "
-        appAvailableMemoryLabel = getString(R.string.app_available_memory) + "  "
-        appTotalMemoryLabel = getString(R.string.app_total_memory) + "  "
-        appMaximumMemoryLabel = getString(R.string.app_maximum_memory) + "  "
-        systemConsumedMemoryLabel = getString(R.string.system_consumed_memory) + "  "
-        systemAvailableMemoryLabel = getString(R.string.system_available_memory) + "  "
-        systemTotalMemoryLabel = getString(R.string.system_total_memory) + "  "
-        val easyListLabel = getString(R.string.easylist_label) + "  "
-        val easyPrivacyLabel = getString(R.string.easyprivacy_label) + "  "
-        val fanboyAnnoyanceLabel = getString(R.string.fanboys_annoyance_label) + "  "
-        val fanboySocialLabel = getString(R.string.fanboys_social_label) + "  "
-        val ultraListLabel = getString(R.string.ultralist_label) + "  "
-        val ultraPrivacyLabel = getString(R.string.ultraprivacy_label) + "  "
-        val issuerDNLabel = getString(R.string.issuer_dn) + "  "
-        val subjectDNLabel = getString(R.string.subject_dn) + "  "
-        val startDateLabel = getString(R.string.start_date) + "  "
-        val endDateLabel = getString(R.string.end_date) + "  "
-        val certificateVersionLabel = getString(R.string.certificate_version) + "  "
-        val serialNumberLabel = getString(R.string.serial_number) + "  "
-        val signatureAlgorithmLabel = getString(R.string.signature_algorithm) + "  "
+        val brandLabel = getString(R.string.brand)
+        val manufacturerLabel = getString(R.string.manufacturer)
+        val modelLabel = getString(R.string.model)
+        val deviceLabel = getString(R.string.device)
+        val bootloaderLabel = getString(R.string.bootloader)
+        val androidLabel = getString(R.string.android)
+        val buildLabel = getString(R.string.build)
+        val kernelLabel = getString(R.string.kernel)
+        val webViewVersionLabel = getString(R.string.webview_version)
+        appConsumedMemoryLabel = getString(R.string.app_consumed_memory)
+        appAvailableMemoryLabel = getString(R.string.app_available_memory)
+        appTotalMemoryLabel = getString(R.string.app_total_memory)
+        appMaximumMemoryLabel = getString(R.string.app_maximum_memory)
+        systemConsumedMemoryLabel = getString(R.string.system_consumed_memory)
+        systemAvailableMemoryLabel = getString(R.string.system_available_memory)
+        systemTotalMemoryLabel = getString(R.string.system_total_memory)
+        val easyListLabel = getString(R.string.easylist_label)
+        val easyPrivacyLabel = getString(R.string.easyprivacy_label)
+        val fanboyAnnoyanceLabel = getString(R.string.fanboys_annoyance_label)
+        val fanboySocialLabel = getString(R.string.fanboys_social_label)
+        val ultraListLabel = getString(R.string.ultralist_label)
+        val ultraPrivacyLabel = getString(R.string.ultraprivacy_label)
+        val issuerDNLabel = getString(R.string.issuer_dn)
+        val subjectDNLabel = getString(R.string.subject_dn)
+        val startDateLabel = getString(R.string.start_date)
+        val endDateLabel = getString(R.string.end_date)
+        val certificateVersionLabel = getString(R.string.certificate_version)
+        val serialNumberLabel = getString(R.string.serial_number)
+        val signatureAlgorithmLabel = getString(R.string.signature_algorithm)
 
         // The WebView layout is only used to get the default user agent from `bare_webview`.  It is not used to render content on the screen.
         // Once the minimum API >= 26 this can be accomplished with the WebView package info.
@@ -421,7 +421,7 @@ class AboutVersionFragment : Fragment() {
         // Null must be checked because some Samsung tablets report a null value for the radio instead of an empty string.  Grrrr.  <https://redmine.stoutner.com/issues/701>
         if (radio != null && radio.isNotEmpty()) {
             // Setup the label.
-            val radioLabel = getString(R.string.radio) + "  "
+            val radioLabel = getString(R.string.radio)
 
             // Create a spannable string builder.
             val radioStringBuilder = SpannableStringBuilder(radioLabel + radio)
@@ -437,7 +437,7 @@ class AboutVersionFragment : Fragment() {
         }
 
         // Setup the label.
-        val securityPatchLabel = getString(R.string.security_patch) + "  "
+        val securityPatchLabel = getString(R.string.security_patch)
 
         // Get the security patch version.
         val securityPatch = Build.VERSION.SECURITY_PATCH
@@ -452,7 +452,7 @@ class AboutVersionFragment : Fragment() {
         securityPatchTextView.text = securityPatchStringBuilder
 
         // Create the WebView provider label.
-        val webViewProviderLabel = getString(R.string.webview_provider) + "  "
+        val webViewProviderLabel = getString(R.string.webview_provider)
 
         // Get the current WebView package info.
         val webViewPackageInfo = WebViewCompat.getCurrentWebViewPackage(requireContext())!!
@@ -472,7 +472,7 @@ class AboutVersionFragment : Fragment() {
         // Only populate the Orbot text view if it is installed.
         if (orbot.isNotEmpty()) {
             // Setup the label.
-            val orbotLabel = getString(R.string.orbot) + "  "
+            val orbotLabel = getString(R.string.orbot)
 
             // Create a spannable string builder.
             val orbotStringBuilder = SpannableStringBuilder(orbotLabel + orbot)
@@ -490,7 +490,7 @@ class AboutVersionFragment : Fragment() {
         // Only populate the I2P text view if it is installed.
         if (i2p.isNotEmpty()) {
             // Setup the label.
-            val i2pLabel = getString(R.string.i2p) + "  "
+            val i2pLabel = getString(R.string.i2p)
 
             // Create a spannable string builder.
             val i2pStringBuilder = SpannableStringBuilder(i2pLabel + i2p)
@@ -508,7 +508,7 @@ class AboutVersionFragment : Fragment() {
         // Only populate the OpenKeychain text view if it is installed.
         if (openKeychain.isNotEmpty()) {
             // Setup the label.
-            val openKeychainLabel = getString(R.string.openkeychain) + "  "
+            val openKeychainLabel = getString(R.string.openkeychain)
 
             // Create a spannable string builder.
             val openKeychainStringBuilder = SpannableStringBuilder(openKeychainLabel + openKeychain)
index 0e351b94c092d38ad16038c41842048d579f414c..6b69e7114143288b1b0a9a16289ca5b9249179cb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2017-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -185,11 +185,11 @@ class DomainSettingsFragment : Fragment() {
             webViewThemeLinearLayout.visibility = View.GONE
 
         // Setup the pinned labels.
-        val cNameLabel = getString(R.string.common_name) + "  "
-        val oNameLabel = getString(R.string.organization) + "  "
-        val uNameLabel = getString(R.string.organizational_unit) + "  "
-        val startDateLabel = getString(R.string.start_date) + "  "
-        val endDateLabel = getString(R.string.end_date) + "  "
+        val cNameLabel = getString(R.string.common_name)
+        val oNameLabel = getString(R.string.organization)
+        val uNameLabel = getString(R.string.organizational_unit)
+        val startDateLabel = getString(R.string.start_date)
+        val endDateLabel = getString(R.string.end_date)
 
         // Initialize the database handler.
         val domainsDatabaseHelper = DomainsDatabaseHelper(requireContext())
index 154ea2dd20849b76d730407fad3ac5929ae8bc2f..6f48043870f19683e8c3af2e29c7497e3142ad8f 100644 (file)
@@ -105,8 +105,8 @@ class WebViewTabFragment : Fragment() {
     }
 
     override fun onCreateView(layoutInflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
-        // Check to see if the fragment is being restarted.
-        return if (savedInstanceState == null) {  // The fragment is not being restarted.  Load and configure a new fragment.
+        // Check to see if the fragment is being restarted without the app being killed.
+        return if (savedInstanceState == null) {  // The fragment is not being restarted.  It is either new or is being restored after the app was killed.
             // Check to see if a new page is being created.
             if (requireArguments().getBoolean(CREATE_NEW_PAGE)) {  // A new page is being created.
                 // Get the variables from the arguments
@@ -129,9 +129,9 @@ class WebViewTabFragment : Fragment() {
 
                 // Return the new page view.
                 newPageView
-            } else {  // A page is being restored.
+            } else {  // A page is being restored after the app was killed.
                 // Get the saved states from the arguments.
-                val savedState = requireArguments().getBundle(SAVED_STATE)
+                val savedState = requireArguments().getBundle(SAVED_STATE)!!
                 val savedNestedScrollWebViewState = requireArguments().getBundle(SAVED_NESTED_SCROLL_WEBVIEW_STATE)!!
 
                 // Inflate the tab's WebView.  Setting false at the end of inflater.inflate does not attach the inflated layout as a child of container.
@@ -149,7 +149,7 @@ class WebViewTabFragment : Fragment() {
                 nestedScrollWebView.restoreNestedScrollWebViewState(savedNestedScrollWebViewState)
 
                 // Restore the WebView state.
-                nestedScrollWebView.restoreState(savedState!!)
+                nestedScrollWebView.restoreState(savedState)
 
                 // Initialize the WebView.
                 newTabListener.initializeWebView(nestedScrollWebView, 0, progressBar, "", true)
index eafe10fefd6fb0cf89bfa4ad31ff7d2b6b5d573f..fb8e84e4982e3b8f957232a085b03f9f988dedd3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2019-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -394,7 +394,7 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS
     }
 
 
-    // Save and restore state.
+    // Save the state.
     fun saveNestedScrollWebViewState(): Bundle {
         // Create a saved state bundle.
         val savedState = Bundle()
@@ -434,6 +434,7 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS
         return savedState
     }
 
+    // Restore the state.
     fun restoreNestedScrollWebViewState(savedState: Bundle) {
         // Restore the class variables.
         domainSettingsApplied = savedState.getBoolean(DOMAIN_SETTINGS_APPLIED)
index 2b68bfc88825a5f625708d1005436bb45179b10c..bf45a9bb5be5db5bbb8f0ba48f3e131ff44b1628 100644 (file)
@@ -31,7 +31,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">de</string>
 
-    <!-- MainWebView. -->
+    <!-- MainWebView.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">Privater Modus</string>
     <string name="javascript_enabled">JavaScript aktiviert</string>
     <string name="javascript_disabled">JavaScript deaktiviert</string>
     <string name="open_navigation_drawer">Navigationspanel öffnen</string>
     <string name="close_navigation_drawer">Navigationspanel schließen</string>
     <string name="pin_drawer">Menü anpinnen</string>
-    <string name="unrecognized_url">Unbekannte URL:</string>
+    <string name="unrecognized_url">Unbekannte URL: \u0020</string>
     <string name="add_tab">Tab hinzufügen</string>
     <string name="close_tab">Tab schließen</string>
     <string name="new_tab">Neuer Tab</string>
     <string name="loading">Laden…</string>
-    <string name="error">Fehler:</string>
+    <string name="error">Fehler: \u0020</string>
     <string name="apply">Anwenden</string>
 
     <!-- Loading Blocklists. -->
@@ -67,7 +67,7 @@
     <string name="favorite_icon">Website-Icon</string>
     <string name="url_or_search_terms">URL oder Suchbegriff</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">SSL-Zertifikat ansehen</string>
     <string name="unencrypted_website">Unverschlüsselte Website</string>
     <string name="no_ssl_certificate">Die Kommunikation mit dieser Website erfolgt nicht verschlüsselt.
     <string name="ssl_certificate">SSL-Zertifikat</string>
     <string name="close">Schließen</string>
     <string name="domain">Domain</string>
-    <string name="ip_addresses">IP-Addressen:</string>
-    <string name="domain_label">Domain:</string>
+    <string name="domain_label">Domain: \u0020</string>
+    <string name="ip_addresses">IP-Addressen: \u0020</string>
     <string name="issued_to">Ausgestellt für</string>
     <string name="issued_by">Ausgestellt von</string>
-    <string name="common_name">Allgemeiner Name (CN):</string>
-    <string name="organization">Organisation (O):</string>
-    <string name="organizational_unit">Organisierende Einheit (OU):</string>
+    <string name="common_name">Allgemeiner Name (CN): \u0020</string>
+    <string name="organization">Organisation (O): \u0020</string>
+    <string name="organizational_unit">Organisierende Einheit (OU): \u0020</string>
     <string name="valid_dates">Gültige Daten</string>
-    <string name="start_date">Startdatum:</string>
-    <string name="end_date">Enddatum:</string>
+    <string name="start_date">Startdatum: \u0020</string>
+    <string name="end_date">Enddatum: \u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">SSL-Zertifikatsfehler</string>
     <string name="proceed">Fortfahren</string>
     <string name="future_certificate">Das Startdatum des SSL-Zertifikats liegt in der Zukunft</string>
@@ -96,7 +96,7 @@
     <string name="invalid_date">Das Datum des Zertifikats ist ungültig</string>
     <string name="invalid_certificate">Das Zertifikat ist ungültig</string>
     <string name="url">URL</string>
-    <string name="url_label">URL:</string>
+    <string name="url_label">URL: \u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">Verankerungs-Fehler</string>
     <string name="current">Aktuelles</string>
     <string name="pinned">Verankert</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">HTTP-Authentifizierung</string>
-    <string name="host">Host:</string>
+    <string name="host">Host: \u0020</string>
     <string name="username">Benutzername</string>
     <string name="password">Passwort</string>
 
     <string name="move_to_folder">In Ordner verschieben</string>
     <string name="move">Verschieben</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">Ausgewählt:</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">Ausgewählt: \u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">Nach oben verschieben</string>
     <string name="move_down">Nach unten verschieben</string>
     <string name="edit">Bearbeiten</string>
     <string name="delete">Löschen</string>
     <string name="select_all">Alle auswählen</string>
-    <string name="bookmarks_deleted">Lesezeichen gelöscht:</string>
+    <string name="bookmarks_deleted">Lesezeichen gelöscht: \u0020</string>
     <string name="undo">Rückgängig</string>
 
     <!-- Bookmarks Database View. -->
     <string name="waiting_for_orbot">Warte auf die Verbindung zum Orbot-Proxy.</string>
     <string name="custom_proxy_invalid">Die benutzerdefinierte Proxy-URL ist ungültig.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation. <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">Über Privacy Browser</string>
     <string name="version">Version</string>
         <string name="version_code">Version %1$s (Versions-Code %2$d)</string>
         <string name="hardware">Hardware</string>
-            <string name="brand">Marke:</string>
-            <string name="manufacturer">Hersteller:</string>
-            <string name="model">Modell:</string>
-            <string name="device">Gerät:</string>
-            <string name="bootloader">Bootloader:</string>
-            <string name="radio">Radio:</string>
+            <string name="brand">Marke: \u0020</string>
+            <string name="manufacturer">Hersteller: \u0020</string>
+            <string name="model">Modell: \u0020</string>
+            <string name="device">Gerät: \u0020</string>
+            <string name="bootloader">Bootloader: \u0020</string>
+            <string name="radio">Radio: \u0020</string>
         <string name="software">Software</string>
-            <string name="android">Android:</string>
+            <string name="android">Android: \u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">Sicherheits-Patch:</string>
-            <string name="build">Build:</string>
-            <string name="kernel">Kernel:</string>
-            <string name="webview_provider">WebView-Anbieter:</string>
-            <string name="webview_version">WebView-Version:</string>
-            <string name="orbot">Orbot:</string>
-            <string name="i2p">I2P:</string>
+            <string name="security_patch">Sicherheits-Patch: \u0020</string>
+            <string name="build">Build: \u0020</string>
+            <string name="kernel">Kernel: \u0020</string>
+            <string name="webview_provider">WebView-Anbieter: \u0020</string>
+            <string name="webview_version">WebView-Version: \u0020</string>
+            <string name="orbot">Orbot: \u0020</string>
+            <string name="i2p">I2P: \u0020</string>
                 <string name="fdroid_flavor">%1$s (F-Droid-Version)</string>
                 <string name="google_play_flavor">%1$s (Google-Play-Version)</string>
-            <string name="openkeychain">OpenKeychain:</string>
+            <string name="openkeychain">OpenKeychain: \u0020</string>
         <string name="memory_usage">Speicher-Nutzung</string>
-            <string name="app_consumed_memory">von der App genutzter Speicher:</string>
-            <string name="app_available_memory">für die App verfügbarer Speicher:</string>
-            <string name="app_total_memory">gesamter App-Speicher:</string>
-            <string name="app_maximum_memory">maximaler App-Speicher:</string>
-            <string name="system_consumed_memory">vom System genutzter Speicher:</string>
-            <string name="system_available_memory">für das System verfügbarer Speicher:</string>
-            <string name="system_total_memory">gesamter System-Speicher:</string>
+            <string name="app_consumed_memory">von der App genutzter Speicher: \u0020</string>
+            <string name="app_available_memory">für die App verfügbarer Speicher: \u0020</string>
+            <string name="app_total_memory">gesamter App-Speicher: \u0020</string>
+            <string name="app_maximum_memory">maximaler App-Speicher: \u0020</string>
+            <string name="system_consumed_memory">vom System genutzter Speicher: \u0020</string>
+            <string name="system_available_memory">für das System verfügbarer Speicher: \u0020</string>
+            <string name="system_total_memory">gesamter System-Speicher: \u0020</string>
             <string name="mebibyte">MiB</string>
-            <string name="easylist_label">EasyList:</string>
-            <string name="easyprivacy_label">EasyPrivacy:</string>
-            <string name="fanboys_annoyance_label">Fanboy’s Annoyance Sperrliste:</string>
-            <string name="fanboys_social_label">Fanboy’s Social Blocking Sperrliste:</string>
-            <string name="ultralist_label">UltraList:</string>
-            <string name="ultraprivacy_label">UltraPrivacy:</string>
+            <string name="easylist_label">EasyList: \u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy: \u0020</string>
+            <string name="fanboys_annoyance_label">Fanboy’s Annoyance Sperrliste: \u0020</string>
+            <string name="fanboys_social_label">Fanboy’s Social Blocking Sperrliste: \u0020</string>
+            <string name="ultralist_label">UltraList: \u0020</string>
+            <string name="ultraprivacy_label">UltraPrivacy: \u0020</string>
         <string name="package_signature">Paket-Signatur</string>
-            <string name="issuer_dn">Aussteller-DN:</string>
-            <string name="subject_dn">Subject DN:</string>
-            <string name="certificate_version">Zertifikat-Version:</string>
-            <string name="serial_number">Seriennummer:</string>
-            <string name="signature_algorithm">Signaturalgorithmus:</string>
+            <string name="issuer_dn">Aussteller-DN: \u0020</string>
+            <string name="subject_dn">Subject DN: \u0020</string>
+            <string name="certificate_version">Zertifikat-Version: \u0020</string>
+            <string name="serial_number">Seriennummer: \u0020</string>
+            <string name="signature_algorithm">Signaturalgorithmus: \u0020</string>
         <string name="version_info_copied">Versions-Information wurde kopiert.</string>
         <string name="privacy_browser_version_txt">Privacy Browser Version %1$s.txt</string>
         <string name="privacy_browser_version_png">Privacy Browser Version %1$s.png</string>
index bad35e6a719a77896beb0949a499c94702a13a46..98a063afed6330c4006153ade88839b76e8aeea8 100644 (file)
@@ -27,7 +27,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">es</string>
 
-    <!-- MainWebViewActivity. -->
+    <!-- MainWebViewActivity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">Modo Privado</string>
     <string name="javascript_enabled">Javascript habilitado</string>
     <string name="javascript_disabled">Javascript deshabilitado</string>
     <string name="open_navigation_drawer">Abrir la caja de navegación</string>
     <string name="close_navigation_drawer">Cerrar la caja de navegación</string>
     <string name="pin_drawer">Fijar el cajón</string>
-    <string name="unrecognized_url">URL no reconocida:</string>
+    <string name="unrecognized_url">URL no reconocida: \u0020</string>
     <string name="add_tab">Añadir pestaña</string>
     <string name="close_tab">Cerrar pestaña</string>
     <string name="new_tab">Nueva pestaña</string>
     <string name="loading">Cargando…</string>
-    <string name="error">Error:</string>
+    <string name="error">Error: \u0020</string>
     <string name="apply">Apply</string>
 
     <!-- Loading Blocklists. -->
@@ -63,7 +63,7 @@
     <string name="favorite_icon">Icono favorito</string>
     <string name="url_or_search_terms">URL o búsqueda</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">Ver certificado SSL</string>
     <string name="unencrypted_website">Web sin cifrar</string>
     <string name="no_ssl_certificate">La comunicación con esta página web no está cifrada.
     <string name="ssl_certificate">Certificado SSL</string>
     <string name="close">Cerrar</string>
     <string name="domain">Dominio</string>
-    <string name="domain_label">Dominio:</string>
-    <string name="ip_addresses">Direcciones IP:</string>
+    <string name="domain_label">Dominio: \u0020</string>
+    <string name="ip_addresses">Direcciones IP: \u0020</string>
     <string name="issued_to">Emitido a</string>
     <string name="issued_by">Emitido por</string>
-    <string name="common_name">Nombre Común (CN):</string>
-    <string name="organization">Organización (O):</string>
-    <string name="organizational_unit">Unidad Organizativa (OU):</string>
+    <string name="common_name">Nombre Común (CN): \u0020</string>
+    <string name="organization">Organización (O): \u0020</string>
+    <string name="organizational_unit">Unidad Organizativa (OU): \u0020</string>
     <string name="valid_dates">Periodo de validez</string>
-    <string name="start_date">Comienza el:</string>
-    <string name="end_date">Caduca el:</string>
+    <string name="start_date">Comienza el: \u0020</string>
+    <string name="end_date">Caduca el: \u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">Error de certificado SSL</string>
     <string name="proceed">Proceder</string>
     <string name="future_certificate">La fecha inicio del certificado está en el futuro</string>
@@ -92,7 +92,7 @@
     <string name="invalid_date">La fecha del certificado es inválida</string>
     <string name="invalid_certificate">El certificado es inválido</string>
     <string name="url">URL</string>
-    <string name="url_label">URL:</string>
+    <string name="url_label">URL: \u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">Desajuste fijado</string>
     <string name="current">Actual</string>
     <string name="pinned">Fijado</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">Autenticación HTTP</string>
-    <string name="host">Host:</string>
+    <string name="host">Host: \u0020</string>
     <string name="username">Usuario</string>
     <string name="password">Contraseña</string>
 
     <string name="move_to_folder">Mover a carpeta</string>
     <string name="move">Mover</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">Seleccionados:</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">Seleccionados: \u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">Subir</string>
     <string name="move_down">Bajar</string>
     <string name="edit">Editar</string>
     <string name="delete">Borrar</string>
     <string name="select_all">Selectionar todo</string>
-    <string name="bookmarks_deleted">Favoritos borrados:</string>
+    <string name="bookmarks_deleted">Favoritos borrados: \u0020</string>
     <string name="undo">Deshacer</string>
 
     <!-- Bookmarks Database View. -->
     <string name="waiting_for_orbot">Esperando a que Orbot se conecte.</string>
     <string name="custom_proxy_invalid">La URL del proxy personalizado no es válida.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation. <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">Acerca de Navegador Privado</string>
     <string name="version">Versión</string>
         <string name="version_code">Versión %1$s (código de versión %2$d)</string>
         <string name="hardware">Hardware</string>
-            <string name="brand">Marca:</string>
-            <string name="manufacturer">Fabricante:</string>
-            <string name="model">Modelo:</string>
-            <string name="device">Dispositivo:</string>
-            <string name="bootloader">Cargador de arranque:</string>
-            <string name="radio">Radio:</string>
+            <string name="brand">Marca: \u0020</string>
+            <string name="manufacturer">Fabricante: \u0020</string>
+            <string name="model">Modelo: \u0020</string>
+            <string name="device">Dispositivo: \u0020</string>
+            <string name="bootloader">Cargador de arranque: \u0020</string>
+            <string name="radio">Radio: \u0020</string>
         <string name="software">Software</string>
-            <string name="android">Android:</string>
+            <string name="android">Android: \u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">Parche de seguridad:</string>
-            <string name="build">Versión de compilación:</string>
-            <string name="kernel">Kernel:</string>
-            <string name="webview_provider">Proveedor de WebView:</string>
-            <string name="webview_version">Versión de WebView:</string>
-            <string name="orbot">Orbot:</string>
-            <string name="i2p">I2P:</string>
+            <string name="security_patch">Parche de seguridad: \u0020</string>
+            <string name="build">Versión de compilación: \u0020</string>
+            <string name="kernel">Kernel: \u0020</string>
+            <string name="webview_provider">Proveedor de WebView: \u0020</string>
+            <string name="webview_version">Versión de WebView: \u0020</string>
+            <string name="orbot">Orbot: \u0020</string>
+            <string name="i2p">I2P: \u0020</string>
                 <string name="fdroid_flavor">%1$s (variante de F-Droid)</string>
                 <string name="google_play_flavor">%1$s (variante de Google Play)</string>
-            <string name="openkeychain">OpenKeychain:</string>
+            <string name="openkeychain">OpenKeychain: \u0020</string>
         <string name="memory_usage">Uso de memoria</string>
-            <string name="app_consumed_memory">Memoria conumida de la app:</string>
-            <string name="app_available_memory">Memoria disponible de la app:</string>
-            <string name="app_total_memory">Memoria total de la app:</string>
-            <string name="app_maximum_memory">Memoria máxima de la app:</string>
-            <string name="system_consumed_memory">Memoria consumida del sistema:</string>
-            <string name="system_available_memory">Memoria disponible del sistema:</string>
-            <string name="system_total_memory">Memoria total del sistema:</string>
+            <string name="app_consumed_memory">Memoria conumida de la app: \u0020</string>
+            <string name="app_available_memory">Memoria disponible de la app: \u0020</string>
+            <string name="app_total_memory">Memoria total de la app: \u0020</string>
+            <string name="app_maximum_memory">Memoria máxima de la app: \u0020</string>
+            <string name="system_consumed_memory">Memoria consumida del sistema: \u0020</string>
+            <string name="system_available_memory">Memoria disponible del sistema: \u0020</string>
+            <string name="system_total_memory">Memoria total del sistema: \u0020</string>
             <string name="mebibyte">MiB</string>
-            <string name="easylist_label">EasyList:</string>
-            <string name="easyprivacy_label">EasyPrivacy:</string>
-            <string name="fanboys_annoyance_label">Lista molesta de Fanboy:</string>
-            <string name="fanboys_social_label">Lista de bloqueo social de Fanboy:</string>
-            <string name="ultralist_label">UltraList:</string>
-            <string name="ultraprivacy_label">Ultra Privacidad:</string>
+            <string name="easylist_label">EasyList: \u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy: \u0020</string>
+            <string name="fanboys_annoyance_label">Lista molesta de Fanboy: \u0020</string>
+            <string name="fanboys_social_label">Lista de bloqueo social de Fanboy: \u0020</string>
+            <string name="ultralist_label">UltraList: \u0020</string>
+            <string name="ultraprivacy_label">Ultra Privacidad: \u0020</string>
         <string name="package_signature">Firma del paquete</string>
-            <string name="issuer_dn">DN del emisor:</string>
-            <string name="subject_dn">DN del sujeto:</string>
-            <string name="certificate_version">Versión del certificado:</string>
-            <string name="serial_number">Número de serie:</string>
-            <string name="signature_algorithm">Algoritmo de firma:</string>
+            <string name="issuer_dn">DN del emisor: \u0020</string>
+            <string name="subject_dn">DN del sujeto: \u0020</string>
+            <string name="certificate_version">Versión del certificado: \u0020</string>
+            <string name="serial_number">Número de serie: \u0020</string>
+            <string name="signature_algorithm">Algoritmo de firma: \u0020</string>
         <string name="version_info_copied">Información de la versión copiada.</string>
         <string name="privacy_browser_version_txt">Versión de Navegador Privado %1$s.txt</string>
         <string name="privacy_browser_version_png">Versión de Navegador Privado %1$s.png</string>
index 5d68d58f326c8ef06ffe2637f33a9e51c25ba388..94cb5aceaad3adb5539e542686d48bb21c2e712f 100644 (file)
@@ -28,7 +28,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  For example, Spanish is `es`.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">fr</string>
 
-    <!-- MainWebView. -->
+    <!-- MainWebView.  Android removes final spaces, but they can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">Mode privé</string>
     <string name="javascript_enabled">JavaScript activé</string>
     <string name="javascript_disabled">JavaScript désactivé</string>
     <string name="open_navigation_drawer">Ouvrir le panneau de navigation</string>
     <string name="close_navigation_drawer">Fermer le panneau de navigation</string>
     <string name="pin_drawer">Épingler le panneau</string>
-    <string name="unrecognized_url">URL inconnue :</string>
+    <string name="unrecognized_url">URL inconnue :\u0020</string>
     <string name="add_tab">Ajouter un onglet</string>
     <string name="close_tab">Fermer l\'onglet</string>
     <string name="new_tab">Nouvel onglet</string>
     <string name="loading">Chargement…</string>
-    <string name="error">Erreur :</string>
+    <string name="error">Erreur :\u0020</string>
     <string name="apply">Appliquer</string>
 
     <!-- Loading Blocklists. -->
@@ -64,7 +64,7 @@
     <string name="favorite_icon">Icône de Favoris</string>
     <string name="url_or_search_terms">Rechercher ou saisir adresse</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate.  Android removes final spaces, but they can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">Voir le certificat SSL</string>
     <string name="unencrypted_website">Site Web non-chiffré</string>
     <string name="no_ssl_certificate">La communication avec ce site n\'est pas chiffrée. Cela permet à des tiers d\'intercepter des informations, traquer votre activité,
     <string name="ssl_certificate">Certificat SSL</string>
     <string name="close">Fermer</string>
     <string name="domain">Domaine</string>
-    <string name="domain_label">Domaine :</string>
-    <string name="ip_addresses">Addresse(s) IP :</string>
+    <string name="domain_label">Domaine :\u0020</string>
+    <string name="ip_addresses">Addresse(s) IP :\u0020</string>
     <string name="issued_to">Delivré à</string>
     <string name="issued_by">Délivré par</string>
-    <string name="common_name">Nom courant (CN) :</string>
-    <string name="organization">Organisation (O) :</string>
-    <string name="organizational_unit">Unité Organisationelle (OU) :</string>
+    <string name="common_name">Nom courant (CN) :\u0020</string>
+    <string name="organization">Organisation (O) :\u0020</string>
+    <string name="organizational_unit">Unité Organisationelle (OU) :\u0020</string>
     <string name="valid_dates">Dates de validités</string>
-    <string name="start_date">Début :</string>
-    <string name="end_date">Fin :</string>
+    <string name="start_date">Début :\u0020</string>
+    <string name="end_date">Fin :\u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes final spaces, but they can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">Erreur de certificat SSL</string>
     <string name="proceed">Continuer</string>
     <string name="future_certificate">La date de début du certificat est dans le futur</string>
@@ -93,7 +93,7 @@
     <string name="invalid_date">La date du certificat est invalide</string>
     <string name="invalid_certificate">Le certificat est invalide</string>
     <string name="url">URL</string>
-    <string name="url_label">URL :</string>
+    <string name="url_label">URL :\u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">Problème de localisation</string>
     <string name="current">Actuelle</string>
     <string name="pinned">Localisé</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication.  Android removes final spaces, but they can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">Authentification HTTP</string>
-    <string name="host">Nom d\'hôte :</string>
+    <string name="host">Nom d\'hôte :\u0020</string>
     <string name="username">Nom d\'utilisateur</string>
     <string name="password">Mot de passe</string>
 
     <string name="move_to_folder">Déplacer vers dossier</string>
     <string name="move">Déplacer</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">Selectionnés :</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes final spaces, but they can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">Selectionnés :\u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">Monter</string>
     <string name="move_down">Descendre</string>
     <string name="edit">Modifier</string>
     <string name="delete">Supprimer</string>
     <string name="select_all">Tout sélectionner</string>
-    <string name="bookmarks_deleted">Favoris supprimés :</string>
+    <string name="bookmarks_deleted">Favoris supprimés :\u0020</string>
     <string name="undo">Annuler</string>
 
     <!-- Bookmarks Database View. -->
     <string name="waiting_for_orbot">En attente de la connexion d\'Orbot.</string>
     <string name="custom_proxy_invalid">L\'URL du proxy personnalisé n\'est pas valide.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation. <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes final spaces, but they can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation. <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">À propos</string>
     <string name="version">Version</string>
         <string name="version_code">Version %1$s (Code de la version %2$d)</string>
         <string name="hardware">Matériel</string>
-            <string name="brand">Marque :</string>
-            <string name="manufacturer">Constructeur :</string>
-            <string name="model">Modèle :</string>
-            <string name="device">Terminal :</string>
-            <string name="bootloader">Bootloader :</string>
-            <string name="radio">Radio :</string>
+            <string name="brand">Marque :\u0020</string>
+            <string name="manufacturer">Constructeur :\u0020</string>
+            <string name="model">Modèle :\u0020</string>
+            <string name="device">Terminal :\u0020</string>
+            <string name="bootloader">Bootloader :\u0020</string>
+            <string name="radio">Radio :\u0020</string>
         <string name="software">Logiciel</string>
-            <string name="android">Android :</string>
+            <string name="android">Android :\u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">MAJ de sécurité :</string>
-            <string name="build">Version :</string>
-            <string name="kernel">Noyau:</string>
-            <string name="webview_provider">Fournisseur WebView :</string>
-            <string name="webview_version">Version WebView :</string>
-            <string name="orbot">Orbot :</string>
-            <string name="i2p">I2P :</string>
+            <string name="security_patch">MAJ de sécurité :\u0020</string>
+            <string name="build">Version :\u0020</string>
+            <string name="kernel">Noyau :\u0020</string>
+            <string name="webview_provider">Fournisseur WebView :\u0020</string>
+            <string name="webview_version">Version WebView :\u0020</string>
+            <string name="orbot">Orbot :\u0020</string>
+            <string name="i2p">I2P :\u0020</string>
                 <string name="fdroid_flavor">%1$s (Version F-Droid)</string>
                 <string name="google_play_flavor">%1$s (Version Google Play)</string>
-            <string name="openkeychain">OpenKeychain :</string>
+            <string name="openkeychain">OpenKeychain :\u0020</string>
         <string name="memory_usage">Utilisation de la mémoire</string>
-            <string name="app_consumed_memory">Mémoire consommée par l\'application :</string>
-            <string name="app_available_memory">Mémoire disponible de l\'application :</string>
-            <string name="app_total_memory">Mémoire totale de l\'application :</string>
-            <string name="app_maximum_memory">Mémoire maximale de l\'application :</string>
-            <string name="system_consumed_memory">Mémoire consommée par le système :</string>
-            <string name="system_available_memory">Mémoire système disponible :</string>
-            <string name="system_total_memory">Mémoire totale du système :</string>
+            <string name="app_consumed_memory">Mémoire consommée par l\'application :\u0020</string>
+            <string name="app_available_memory">Mémoire disponible de l\'application :\u0020</string>
+            <string name="app_total_memory">Mémoire totale de l\'application :\u0020</string>
+            <string name="app_maximum_memory">Mémoire maximale de l\'application :\u0020</string>
+            <string name="system_consumed_memory">Mémoire consommée par le système :\u0020</string>
+            <string name="system_available_memory">Mémoire système disponible :\u0020</string>
+            <string name="system_total_memory">Mémoire totale du système :\u0020</string>
             <string name="mebibyte">Mio</string>
-            <string name="easylist_label">EasyList :</string>
-            <string name="easyprivacy_label">EasyPrivacy :</string>
-            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List :</string>
-            <string name="fanboys_social_label">Fanboy’s Social Blocking List :</string>
-            <string name="ultralist_label">UltraList :</string>
-            <string name="ultraprivacy_label">UltraPrivacy :</string>
+            <string name="easylist_label">EasyList :\u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy :\u0020</string>
+            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List :\u0020</string>
+            <string name="fanboys_social_label">Fanboy’s Social Blocking List :\u0020</string>
+            <string name="ultralist_label">UltraList :\u0020</string>
+            <string name="ultraprivacy_label">UltraPrivacy :\u0020</string>
         <string name="package_signature">Signature de paquets</string>
-            <string name="issuer_dn">DN émetteur :</string>
-            <string name="subject_dn">Dn sujet :</string>
-            <string name="certificate_version">Version du certificat :</string>
-            <string name="serial_number">Numéro de série :</string>
-            <string name="signature_algorithm">Algorithme de chiffrement :</string>
+            <string name="issuer_dn">DN émetteur :\u0020</string>
+            <string name="subject_dn">Dn sujet :\u0020</string>
+            <string name="certificate_version">Version du certificat :\u0020</string>
+            <string name="serial_number">Numéro de série :\u0020</string>
+            <string name="signature_algorithm">Algorithme de chiffrement :\u0020</string>
         <string name="version_info_copied">Informations de version copiées.</string>
         <string name="privacy_browser_version_txt">Privacy Browser Version %1$s.txt</string>
         <string name="privacy_browser_version_png">Privacy Browser Version %1$s.png</string>
index 3fde1f5c89fbd8239489d8aa5868fb82bfadb480..2991c561f5af4c799987260806f24896ca83edff 100644 (file)
@@ -27,7 +27,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">it</string>
 
-    <!-- MainWebView. -->
+    <!-- MainWebView.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">Modalità privata</string>
     <string name="javascript_enabled">JavaScript abilitato</string>
     <string name="javascript_disabled">JavaScript disabilitato</string>
     <string name="open_navigation_drawer">Apri il menu di navigazione</string>
     <string name="close_navigation_drawer">Chiudi il menu di navigazione</string>
     <string name="pin_drawer">Fissa il cassetto</string>
-    <string name="unrecognized_url">URL non riconosciuta:</string>
+    <string name="unrecognized_url">URL non riconosciuta: \u0020</string>
     <string name="add_tab">Aggiungi Scheda</string>
     <string name="close_tab">Chiudi Scheda</string>
     <string name="new_tab">Nuova Scheda</string>
     <string name="loading">Caricamento…</string>
-    <string name="error">Errore:</string>
+    <string name="error">Errore: \u0020</string>
     <string name="apply">Applica</string>
 
     <!-- Loading Blocklists. -->
@@ -63,7 +63,7 @@
     <string name="favorite_icon">FavIcon</string>
     <string name="url_or_search_terms">Digita URL o Ricerca</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">Visualizza il certificato SSL</string>
     <string name="unencrypted_website">Sito non criptato</string>
     <string name="no_ssl_certificate">La comunicazione con questo sito web non è criptata. Questo consente a terze parti la possibilità di intercettare le informazioni scambiate,
     <string name="ssl_certificate">Certificato SSL</string>
     <string name="close">Chiudi</string>
     <string name="domain">Dominio</string>
-    <string name="domain_label">Dominio:</string>
-    <string name="ip_addresses">Indirizzi IP:</string>
+    <string name="domain_label">Dominio: \u0020</string>
+    <string name="ip_addresses">Indirizzi IP: \u0020</string>
     <string name="issued_to">Emesso a</string>
     <string name="issued_by">Emesso da</string>
-    <string name="common_name">Nome comune (NC):</string>
-    <string name="organization">Organizzazione (O):</string>
-    <string name="organizational_unit">Unità organizzativa (UO):</string>
+    <string name="common_name">Nome comune (NC): \u0020</string>
+    <string name="organization">Organizzazione (O): \u0020</string>
+    <string name="organizational_unit">Unità organizzativa (UO): \u0020</string>
     <string name="valid_dates">Date valide</string>
-    <string name="start_date">Data di inizio:</string>
-    <string name="end_date">Data finale:</string>
+    <string name="start_date">Data di inizio: \u0020</string>
+    <string name="end_date">Data finale: \u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">Errore certificato SSL</string>
     <string name="proceed">Continua</string>
     <string name="future_certificate">La data di inizio del certificato è nel futuro</string>
@@ -92,7 +92,7 @@
     <string name="invalid_date">La data del certificato non è valida</string>
     <string name="invalid_certificate">Il certificato non è valido</string>
     <string name="url">URL</string>
-    <string name="url_label">URL:</string>
+    <string name="url_label">URL: \u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">Discrepanza certificato</string>
     <string name="current">Attuale</string>
     <string name="pinned">Appuntato</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">Autenticazione HTTP</string>
-    <string name="host">Host:</string>
+    <string name="host">Host: \u0020</string>
     <string name="username">Nome utente</string>
     <string name="password">Password</string>
 
     <string name="move_to_folder">Sposta nella Cartella</string>
     <string name="move">Sposta</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">Selezionato:</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">Selezionato: \u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">Sposta sopra</string>
     <string name="move_down">Sposta sotto</string>
     <string name="edit">Modifica</string>
     <string name="delete">Elimina</string>
     <string name="select_all">Seleziona tutto</string>
-    <string name="bookmarks_deleted">Segnalibri eliminati:</string>
+    <string name="bookmarks_deleted">Segnalibri eliminati: \u0020</string>
     <string name="undo">Annulla</string>
 
     <!-- Bookmarks Database View. -->
     <string name="waiting_for_orbot">In attesa della connessione di Orbot.</string>
     <string name="custom_proxy_invalid">La URL del proxy personalizzato non è valida.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation. <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">Informazioni su Privacy Browser</string>
     <string name="version">Versione</string>
         <string name="version_code">Versione %1$s (codice versione %2$d)</string>
         <string name="hardware">Hardware</string>
-            <string name="brand">Brand:</string>
-            <string name="manufacturer">Costruttore:</string>
-            <string name="model">Modello:</string>
-            <string name="device">Dispositivo:</string>
-            <string name="bootloader">Bootloader:</string>
-            <string name="radio">Radio:</string>
+            <string name="brand">Brand: \u0020</string>
+            <string name="manufacturer">Costruttore: \u0020</string>
+            <string name="model">Modello: \u0020</string>
+            <string name="device">Dispositivo: \u0020</string>
+            <string name="bootloader">Bootloader: \u0020</string>
+            <string name="radio">Radio: \u0020</string>
         <string name="software">Software</string>
-            <string name="android">Android:</string>
+            <string name="android">Android: \u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">Patch si sicurezza:</string>
-            <string name="build">Build:</string>
-            <string name="kernel">Kernel:</string>
-            <string name="webview_provider">Provider di WebView:</string>
-            <string name="webview_version">Versione di WebView:</string>
-            <string name="orbot">Orbot:</string>
-            <string name="i2p">I2P:</string>
+            <string name="security_patch">Patch si sicurezza: \u0020</string>
+            <string name="build">Build: \u0020</string>
+            <string name="kernel">Kernel: \u0020</string>
+            <string name="webview_provider">Provider di WebView: \u0020</string>
+            <string name="webview_version">Versione di WebView: \u0020</string>
+            <string name="orbot">Orbot: \u0020</string>
+            <string name="i2p">I2P: \u0020</string>
                 <string name="fdroid_flavor">%1$s (Versione F-Droid)</string>
                 <string name="google_play_flavor">%1$s (Versione Google Play)</string>
-            <string name="openkeychain">OpenKeychain:</string>
+            <string name="openkeychain">OpenKeychain: \u0020</string>
         <string name="memory_usage">Utilizzo della Memoria</string>
-            <string name="app_consumed_memory">Memoria utilizzata dalla App:</string>
-            <string name="app_available_memory">Memoria disponibile App:</string>
-            <string name="app_total_memory">Memoria totale App:</string>
-            <string name="app_maximum_memory">Memoria massima App:</string>
-            <string name="system_consumed_memory">Memoria di sistema utilizzata:</string>
-            <string name="system_available_memory">Memoria di sistema disponibile:</string>
-            <string name="system_total_memory">Memoria totale del sistema:</string>
+            <string name="app_consumed_memory">Memoria utilizzata dalla App: \u0020</string>
+            <string name="app_available_memory">Memoria disponibile App: \u0020</string>
+            <string name="app_total_memory">Memoria totale App: \u0020</string>
+            <string name="app_maximum_memory">Memoria massima App: \u0020</string>
+            <string name="system_consumed_memory">Memoria di sistema utilizzata: \u0020</string>
+            <string name="system_available_memory">Memoria di sistema disponibile: \u0020</string>
+            <string name="system_total_memory">Memoria totale del sistema: \u0020</string>
             <string name="mebibyte">MiB</string>
-            <string name="easylist_label">EasyList:</string>
-            <string name="easyprivacy_label">EasyPrivacy:</string>
-            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List:</string>
-            <string name="fanboys_social_label">Fanboy’s Social Blocking List:</string>
-            <string name="ultralist_label">UltraList:</string>
-            <string name="ultraprivacy_label">UltraPrivacy:</string>
+            <string name="easylist_label">EasyList: \u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy: \u0020</string>
+            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List: \u0020</string>
+            <string name="fanboys_social_label">Fanboy’s Social Blocking List: \u0020</string>
+            <string name="ultralist_label">UltraList: \u0020</string>
+            <string name="ultraprivacy_label">UltraPrivacy: \u0020</string>
         <string name="package_signature">Firma del Pacchetto</string>
-            <string name="issuer_dn">Emittente:</string>
-            <string name="subject_dn">Soggetto:</string>
-            <string name="certificate_version">Versione del Certificato:</string>
-            <string name="serial_number">Numero di Serie:</string>
-            <string name="signature_algorithm">Algoritmo di firma:</string>
+            <string name="issuer_dn">Emittente: \u0020</string>
+            <string name="subject_dn">Soggetto: \u0020</string>
+            <string name="certificate_version">Versione del Certificato: \u0020</string>
+            <string name="serial_number">Numero di Serie: \u0020</string>
+            <string name="signature_algorithm">Algoritmo di firma: \u0020</string>
         <string name="version_info_copied">Info sulla Versione copiate.</string>
         <string name="privacy_browser_version_txt">Versione di Privacy Browser %1$s.txt</string>
         <string name="privacy_browser_version_png">Versione di Privacy Browser %1$s.png</string>
index fc55bb85c5cfaccca253cc7aef73ee82b55c740c..e5a4eb6e3bac3556203f4d8140273a59a519ea13 100644 (file)
@@ -27,7 +27,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  For example, Spanish is `es`.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">pt-rBR</string>
 
-    <!-- MainWebView. -->
+    <!-- MainWebView.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">Modo Privado</string>
     <string name="javascript_enabled">JavaScript ativado</string>
     <string name="javascript_disabled">JavaScript desativado</string>
     <string name="form_data_deleted">Dados do formulário excluídos</string>
     <string name="open_navigation_drawer">Abrir a caixa de navegação</string>
     <string name="close_navigation_drawer">Fechar a caixa de navegação</string>
-    <string name="unrecognized_url">URL desconhecida:</string>
+    <string name="unrecognized_url">URL desconhecida: \u0020</string>
     <string name="add_tab">Adicionar aba</string>
     <string name="close_tab">Fechar aba</string>
     <string name="new_tab">Nova aba</string>
     <string name="loading">Carregando...</string>
-    <string name="error">Erro:</string>
+    <string name="error">Erro: \u0020</string>
     <string name="apply">Aplicar</string>
 
     <!-- Loading Blocklists. -->
     <string name="favorite_icon">Ícone dos Favoritos</string>
     <string name="url_or_search_terms">URL ou termos de pesquisa</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">Ver certificado SSL</string>
     <string name="unencrypted_website">Site não criptografado</string>
     <string name="no_ssl_certificate">A comunicação com este site não é criptografada. Isso permite que terceiros interceptem informações, rastreiem sua navegação e insiram conteúdo malicioso.</string>
     <string name="ssl_certificate">Certificado SSL</string>
     <string name="close">Fecha</string>
     <string name="domain">Domínio</string>
-    <string name="domain_label">Domínio:</string>
-    <string name="ip_addresses">Endereço de IP:</string>
+    <string name="domain_label">Domínio: \u0020</string>
+    <string name="ip_addresses">Endereço de IP: \u0020</string>
     <string name="issued_to">Emitido para</string>
     <string name="issued_by">Emitido por</string>
-    <string name="common_name">Nome Comum:</string>
-    <string name="organization">Organização:</string>
-    <string name="organizational_unit">Unidade da  Organização:</string>
+    <string name="common_name">Nome Comum: \u0020</string>
+    <string name="organization">Organização: \u0020</string>
+    <string name="organizational_unit">Unidade da  Organização: \u0020</string>
     <string name="valid_dates">Datas Válidas</string>
-    <string name="start_date">Data Inicial:</string>
-    <string name="end_date">Data Final:</string>
+    <string name="start_date">Data Inicial: \u0020</string>
+    <string name="end_date">Data Final: \u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">Erro de certificado SSL</string>
     <string name="proceed">Prosseguir</string>
     <string name="future_certificate">A data de início do certificado está no futuro</string>
@@ -90,7 +90,7 @@
     <string name="invalid_date">A data do certificado é inválida</string>
     <string name="invalid_certificate">O certificado é inválido</string>
     <string name="url">URL</string>
-    <string name="url_label">URL:</string>
+    <string name="url_label">URL: \u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">Incompatibilidade fixada</string>
@@ -98,9 +98,9 @@
     <string name="current">Atual</string>
     <string name="pinned">Fixada</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">Autenticação HTTP</string>
-    <string name="host">Host:</string>
+    <string name="host">Host: \u0020</string>
     <string name="username">Nome do usuário</string>
     <string name="password">Senha</string>
 
     <string name="move_to_folder">Mover para a pasta</string>
     <string name="move">Mover</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">Selecionados:</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">Selecionados: \u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">Subir</string>
     <string name="move_down">Descer</string>
     <string name="edit">Editar</string>
     <string name="delete">Apagar</string>
     <string name="select_all">Selecionar Tudo</string>
-    <string name="bookmarks_deleted">Favoritos excluídos:</string>
+    <string name="bookmarks_deleted">Favoritos excluídos: \u0020</string>
     <string name="undo">Desfazer</string>
 
     <!-- Bookmarks Database View. -->
     <string name="waiting_for_orbot">Esperando que o Orbot se conecte.</string>
     <string name="custom_proxy_invalid">O URL do proxy personalizado é inválido.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation. <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">Sobre o Privacy Browser</string>
     <string name="version">Versão</string>
         <string name="version_code">Versão %1$s (Código da Versão %2$d)</string>
         <string name="hardware">Hardware</string>
-            <string name="brand">Marca:</string>
-            <string name="manufacturer">Fabricante:</string>
-            <string name="model">Modelo:</string>
-            <string name="device">Dispositivo:</string>
-            <string name="bootloader">Bootloader:</string>
-            <string name="radio">Rádio:</string>
+            <string name="brand">Marca: \u0020</string>
+            <string name="manufacturer">Fabricante: \u0020</string>
+            <string name="model">Modelo: \u0020</string>
+            <string name="device">Dispositivo: \u0020</string>
+            <string name="bootloader">Bootloader: \u0020</string>
+            <string name="radio">Rádio: \u0020</string>
         <string name="software">Software</string>
-            <string name="android">Android:</string>
+            <string name="android">Android: \u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">Patch de segurança:</string>
-            <string name="build">Build:</string>
-            <string name="kernel">Kernel:</string>
-            <string name="webview_provider">Fornecedor WebView:</string>
-            <string name="webview_version">Versão do WebView:</string>
-            <string name="orbot">Orbot:</string>
-            <string name="i2p">I2P:</string>
+            <string name="security_patch">Patch de segurança: \u0020</string>
+            <string name="build">Build: \u0020</string>
+            <string name="kernel">Kernel: \u0020</string>
+            <string name="webview_provider">Fornecedor WebView: \u0020</string>
+            <string name="webview_version">Versão do WebView: \u0020</string>
+            <string name="orbot">Orbot: \u0020</string>
+            <string name="i2p">I2P: \u0020</string>
                 <string name="fdroid_flavor">%1$s (Derivação do F-Droid)</string>
                 <string name="google_play_flavor">%1$s (Derivação do Google Play)</string>
-            <string name="openkeychain">OpenKeychain:</string>
+            <string name="openkeychain">OpenKeychain: \u0020</string>
         <string name="memory_usage">Uso da Memória</string>
-            <string name="app_consumed_memory">Consumo da Memória do Aplicativo:</string>
-            <string name="app_available_memory">Memória Disponível do Aplicativo:</string>
-            <string name="app_total_memory">Memória Total do Aplicativo:</string>
-            <string name="app_maximum_memory">Memória Máxima do Aplicativo:</string>
-            <string name="system_consumed_memory">Memória Consumida do Sistema:</string>
-            <string name="system_available_memory">Memória Disponível do Sistema:</string>
-            <string name="system_total_memory">Memória Total do Sistema:</string>
+            <string name="app_consumed_memory">Consumo da Memória do Aplicativo: \u0020</string>
+            <string name="app_available_memory">Memória Disponível do Aplicativo: \u0020</string>
+            <string name="app_total_memory">Memória Total do Aplicativo: \u0020</string>
+            <string name="app_maximum_memory">Memória Máxima do Aplicativo: \u0020</string>
+            <string name="system_consumed_memory">Memória Consumida do Sistema: \u0020</string>
+            <string name="system_available_memory">Memória Disponível do Sistema: \u0020</string>
+            <string name="system_total_memory">Memória Total do Sistema: \u0020</string>
             <string name="mebibyte">MiB</string>
-            <string name="easylist_label">EasyList:</string>
-            <string name="easyprivacy_label">EasyPrivacy:</string>
-            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List:</string>
-            <string name="fanboys_social_label">Fanboy’s Social Blocking List:</string>
-            <string name="ultralist_label">UltraList:</string>
-            <string name="ultraprivacy_label">UltraPrivacy:</string>
+            <string name="easylist_label">EasyList: \u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy: \u0020</string>
+            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List: \u0020</string>
+            <string name="fanboys_social_label">Fanboy’s Social Blocking List: \u0020</string>
+            <string name="ultralist_label">UltraList: \u0020</string>
+            <string name="ultraprivacy_label">UltraPrivacy: \u0020</string>
         <string name="package_signature">Assinatura do Pacote</string>
-            <string name="issuer_dn">DN do emissor:</string>
-            <string name="subject_dn">Assunto DN:</string>
-            <string name="certificate_version">Versão do certificado:</string>
-            <string name="serial_number">Número de série:</string>
-            <string name="signature_algorithm">Algoritmo de Assinatura:</string>
+            <string name="issuer_dn">DN do emissor: \u0020</string>
+            <string name="subject_dn">Assunto DN: \u0020</string>
+            <string name="certificate_version">Versão do certificado: \u0020</string>
+            <string name="serial_number">Número de série: \u0020</string>
+            <string name="signature_algorithm">Algoritmo de Assinatura: \u0020</string>
         <string name="version_info_copied">Informações de versão copiada.</string>
         <string name="privacy_browser_version_txt">Privacy Browser Versão %1$s.txt</string>
         <string name="privacy_browser_version_png">Privacy Browser Versão %1$s.png</string>
index e6263a6be713c0ba7962e0d4ca7e486bfd601f54..0d8c94d55f7959c678b012f474fefc684f4fdf86 100644 (file)
@@ -25,7 +25,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">ru</string> -->
 
-    <!-- MainWebView. -->
+    <!-- MainWebView.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">Режим приватности</string>
     <string name="javascript_enabled">JavaScript включен</string>
     <string name="javascript_disabled">JavaScript отключен</string>
     <string name="open_navigation_drawer">Открыть панель навигации</string>
     <string name="close_navigation_drawer">Закрыть панель навигации</string>
     <string name="pin_drawer">Закрепить панель</string>
-    <string name="unrecognized_url">Нераспознанный URL:</string>
+    <string name="unrecognized_url">Нераспознанный URL: \u0020</string>
     <string name="add_tab">Добавить вкладку</string>
     <string name="close_tab">Закрыть вкладку</string>
     <string name="new_tab">Новая вкладка</string>
     <string name="loading">Загрузка…</string>
-    <string name="error">Ошибка:</string>
+    <string name="error">Ошибка: \u0020</string>
     <string name="apply">Применить</string>
 
     <!-- Loading Blocklists. -->
     <string name="favorite_icon">Значок сайта</string>
     <string name="url_or_search_terms">URL или поисковый запрос</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">Просмотр сертификата SSL</string>
     <string name="unencrypted_website">Незашифрованный веб-сайт</string>
     <string name="no_ssl_certificate">Соединение с этим сайтом не зашифровано. Это позволяет третьим сторонам перехватывать информацию, отслеживать просмотр и внедрять вредоносный контент.</string>
     <string name="ssl_certificate">Сертификат SSL</string>
     <string name="close">Закрыть</string>
     <string name="domain">Домен</string>
-    <string name="domain_label">Домен:</string>
-    <string name="ip_addresses">IP-адреса:</string>
+    <string name="domain_label">Домен: \u0020</string>
+    <string name="ip_addresses">IP-адреса: \u0020</string>
     <string name="issued_to">Кому выдан</string>
     <string name="issued_by">Кем выдан</string>
-    <string name="common_name">Общепринятое имя (CN):</string>
-    <string name="organization">Организация (O):</string>
-    <string name="organizational_unit">Подразделение (OU):</string>
+    <string name="common_name">Общепринятое имя (CN): \u0020</string>
+    <string name="organization">Организация (O): \u0020</string>
+    <string name="organizational_unit">Подразделение (OU): \u0020</string>
     <string name="valid_dates">Срок действия</string>
-    <string name="start_date">Начало:</string>
-    <string name="end_date">Конец:</string>
+    <string name="start_date">Начало: \u0020</string>
+    <string name="end_date">Конец: \u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">Ошибка сертификата SSL</string>
     <string name="proceed">Продолжить</string>
     <string name="future_certificate">Дата начала действия сертификата еще не наступила</string>
@@ -89,7 +89,7 @@
     <string name="invalid_date">Недопустимая дата сертификата</string>
     <string name="invalid_certificate">Недопустимый сертификат.</string>
     <string name="url">URL</string>
-    <string name="url_label">URL:</string>
+    <string name="url_label">URL: \u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">Несоответствие закрепленных</string>
@@ -97,9 +97,9 @@
     <string name="current">Текущий</string>
     <string name="pinned">Закрепленный</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">Аутентификация HTTP</string>
-    <string name="host">Host:</string>
+    <string name="host">Host: \u0020</string>
     <string name="username">Имя пользователя</string>
     <string name="password">Пароль</string>
 
     <string name="move_to_folder">Переместить в папку</string>
     <string name="move">Переместить</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">выбраны:</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">выбраны: \u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">Вверх</string>
     <string name="move_down">Вниз</string>
     <string name="edit">Изменить</string>
     <string name="delete">Удалить</string>
     <string name="select_all">Выбрать все</string>
-    <string name="bookmarks_deleted">Закладок удалены:</string>
+    <string name="bookmarks_deleted">Закладок удалены: \u0020</string>
     <string name="undo">Вернуть</string>
 
     <!-- Bookmarks Database View. -->
     <string name="waiting_for_orbot">Ожидание подключения Orbot.</string>
     <string name="custom_proxy_invalid">URL пользовательского прокси недействителен.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation. <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">О Privacy Browser</string>
     <string name="version">Версия</string>
         <string name="version_code">Версия %1$s (код версии %2$d)</string>
         <string name="hardware">Оборудование</string>
-            <string name="brand">Бренд:</string>
-            <string name="manufacturer">Производитель:</string>
-            <string name="model">Модель:</string>
-            <string name="device">Устройство:</string>
-            <string name="bootloader">Загрузчик:</string>
-            <string name="radio">Радио:</string>
+            <string name="brand">Бренд: \u0020</string>
+            <string name="manufacturer">Производитель: \u0020</string>
+            <string name="model">Модель: \u0020</string>
+            <string name="device">Устройство: \u0020</string>
+            <string name="bootloader">Загрузчик: \u0020</string>
+            <string name="radio">Радио: \u0020</string>
         <string name="software">Программное обеспечение</string>
-            <string name="android">Android:</string>
+            <string name="android">Android: \u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">Патч безопасности:</string>
-            <string name="build">Сборка:</string>
-            <string name="kernel">Ядро:</string>
-            <string name="webview_provider">Провайдер WebView:</string>
-            <string name="webview_version">Версия WebView:</string>
-            <string name="orbot">Orbot:</string>
-            <string name="i2p">I2P:</string>
+            <string name="security_patch">Патч безопасности: \u0020</string>
+            <string name="build">Сборка: \u0020</string>
+            <string name="kernel">Ядро: \u0020</string>
+            <string name="webview_provider">Провайдер WebView: \u0020</string>
+            <string name="webview_version">Версия WebView: \u0020</string>
+            <string name="orbot">Orbot: \u0020</string>
+            <string name="i2p">I2P: \u0020</string>
                 <string name="fdroid_flavor">%1$s (F-Droid-версия)</string>
                 <string name="google_play_flavor">%1$s (Google Play-версия)</string>
-            <string name="openkeychain">OpenKeychain:</string>
+            <string name="openkeychain">OpenKeychain: \u0020</string>
         <string name="memory_usage">Использование памяти</string>
-            <string name="app_consumed_memory">Потребляемая приложением память:</string>
-            <string name="app_available_memory">Доступная приложению память:</string>
-            <string name="app_total_memory">Общая память приложения:</string>
-            <string name="app_maximum_memory">Максимальная память приложения:</string>
-            <string name="system_consumed_memory">Потребляемая системой память:</string>
-            <string name="system_available_memory">Доступная системе память:</string>
-            <string name="system_total_memory">Общая память системы:</string>
+            <string name="app_consumed_memory">Потребляемая приложением память: \u0020</string>
+            <string name="app_available_memory">Доступная приложению память: \u0020</string>
+            <string name="app_total_memory">Общая память приложения: \u0020</string>
+            <string name="app_maximum_memory">Максимальная память приложения: \u0020</string>
+            <string name="system_consumed_memory">Потребляемая системой память: \u0020</string>
+            <string name="system_available_memory">Доступная системе память: \u0020</string>
+            <string name="system_total_memory">Общая память системы: \u0020</string>
             <string name="mebibyte">МиБ</string>
-            <string name="easylist_label">EasyList:</string>
-            <string name="easyprivacy_label">EasyPrivacy:</string>
-            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List:</string>
-            <string name="fanboys_social_label">Fanboy’s Social Blocking List:</string>
-            <string name="ultralist_label">UltraList:</string>
-            <string name="ultraprivacy_label">UltraPrivacy:</string>
+            <string name="easylist_label">EasyList: \u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy: \u0020</string>
+            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List: \u0020</string>
+            <string name="fanboys_social_label">Fanboy’s Social Blocking List: \u0020</string>
+            <string name="ultralist_label">UltraList: \u0020</string>
+            <string name="ultraprivacy_label">UltraPrivacy: \u0020</string>
         <string name="package_signature">Подпись пакета</string>
-            <string name="issuer_dn">DN эмитента:</string>
-            <string name="subject_dn">DN субъекта:</string>
-            <string name="certificate_version">Версия сертификата:</string>
-            <string name="serial_number">Серийный номер:</string>
-            <string name="signature_algorithm">Алгоритм подписи:</string>
+            <string name="issuer_dn">DN эмитента: \u0020</string>
+            <string name="subject_dn">DN субъекта: \u0020</string>
+            <string name="certificate_version">Версия сертификата: \u0020</string>
+            <string name="serial_number">Серийный номер: \u0020</string>
+            <string name="signature_algorithm">Алгоритм подписи: \u0020</string>
         <string name="version_info_copied">Информация о версии скопирована.</string>
         <string name="privacy_browser_version_txt">Версия Privacy Browser %1$s.txt</string>
         <string name="privacy_browser_version_png">Версия Privacy Browser %1$s.png</string>
index 2fd4676c36170b70b1eb45d7d3af6b59a6d834d9..39a0b5006923af0ce63b1a5ab4c5f89d650a433d 100644 (file)
@@ -24,7 +24,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">tr</string>
 
-    <!-- MainWebView. -->
+    <!-- MainWebView.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">Gizlilik Modu</string>
     <string name="javascript_enabled">JavaScript etkin</string>
     <string name="javascript_disabled">JavaScript devre dışı</string>
     <string name="form_data_deleted">Form Verisi silindi</string>
     <string name="open_navigation_drawer">Gezinti Menüsünü aç</string>
     <string name="close_navigation_drawer">Gezinti Menüsünü kapa</string>
-    <string name="unrecognized_url">Onaylanmamış URL:</string>
+    <string name="unrecognized_url">Onaylanmamış URL: \u0020</string>
     <string name="add_tab">Sekme ekle</string>
     <string name="close_tab">Sekmeyi kapa</string>
     <string name="new_tab">Yeni sekme</string>
     <string name="loading">Yükleniyor…</string>
-    <string name="error">Hata:</string>
+    <string name="error">Hata: \u0020</string>
 
     <!-- Loading Blocklists. -->
     <string name="loading_easylist">EasyList yükleniyor</string>
@@ -56,7 +56,7 @@
     <string name="favorite_icon">Site Simgesi</string>
     <string name="url_or_search_terms">URL veya Arama Terimleri</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">SSL Sertifika görüntüle</string>
     <string name="unencrypted_website">Şifrelenmemiş web sitesi</string>
     <string name="no_ssl_certificate">Bu web sitesiyle bağlantınız şifrelenmemiştir.
     <string name="ssl_certificate">SSL Sertifika</string>
     <string name="close">Kapat</string>
     <string name="domain">Domain</string>
-    <string name="domain_label">Domain:</string>
-    <string name="ip_addresses">IP Adresleri:</string>
+    <string name="domain_label">Domain: \u0020</string>
+    <string name="ip_addresses">IP Adresleri: \u0020</string>
     <string name="issued_to">Verilen</string>
     <string name="issued_by">Veren</string>
-    <string name="common_name">Ortak Ad (CN):</string>
-    <string name="organization">Organizasyon (O):</string>
-    <string name="organizational_unit">Organizasyon Birimi (OU):</string>
+    <string name="common_name">Ortak Ad (CN): \u0020</string>
+    <string name="organization">Organizasyon (O): \u0020</string>
+    <string name="organizational_unit">Organizasyon Birimi (OU): \u0020</string>
     <string name="valid_dates">Geçerli Tarihler</string>
-    <string name="start_date">Başlangıç Tarihi:</string>
-    <string name="end_date">Bitiş Tarihi:</string>
+    <string name="start_date">Başlangıç Tarihi: \u0020</string>
+    <string name="end_date">Bitiş Tarihi: \u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">SSL Sertifika Hatası</string>
     <string name="proceed">İlerle</string>
     <string name="future_certificate">Bu sertifika henüz geçerli değil</string>
@@ -85,7 +85,7 @@
     <string name="invalid_date">Bu sertifikanın tarihi geçerli değil</string>
     <string name="invalid_certificate">Bu sertifika geçerli değil</string>
     <string name="url">URL</string>
-    <string name="url_label">URL:</string>
+    <string name="url_label">URL: \u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">Sabit Uyumsuzluğu</string>
@@ -93,9 +93,9 @@
     <string name="current">Geçerli</string>
     <string name="pinned">Sabit</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">HTTP Kimlik Doğrulama</string>
-    <string name="host">Ana makine:</string>
+    <string name="host">Ana makine: \u0020</string>
     <string name="username">Kullanıcı Adı</string>
     <string name="password">Şifre</string>
 
     <string name="move_to_folder">Klasöre taşı</string>
     <string name="move">Taşı</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">Seçili:</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">Seçili: \u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">Yukarı taşı</string>
     <string name="move_down">Aşağı taşı</string>
     <string name="edit">Düzenle</string>
     <string name="delete">Sil</string>
     <string name="select_all">Hepsini seç</string>
-    <string name="bookmarks_deleted">Yer imleri silindi:</string>
+    <string name="bookmarks_deleted">Yer imleri silindi: \u0020</string>
     <string name="undo">Geri al</string>
 
     <!-- Bookmarks Database View. -->
     <!-- Orbot. -->
     <string name="waiting_for_orbot">Orbot\'un bağlanması bekleniyor.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation. <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">Privacy Browser Hakkında</string>
     <string name="version">Versiyon</string>
         <string name="version_code">Versiyon %1$s (versiyon kodu %2$d)</string>
         <string name="hardware">Donanım</string>
-            <string name="brand">Marka:</string>
-            <string name="manufacturer">Üretici:</string>
-            <string name="model">Model:</string>
-            <string name="device">Cihaz:</string>
-            <string name="bootloader">Bootloader:</string>
-            <string name="radio">Donanım Yazılımı:</string>
+            <string name="brand">Marka: \u0020</string>
+            <string name="manufacturer">Üretici: \u0020</string>
+            <string name="model">Model: \u0020</string>
+            <string name="device">Cihaz: \u0020</string>
+            <string name="bootloader">Bootloader: \u0020</string>
+            <string name="radio">Donanım Yazılımı: \u0020</string>
         <string name="software">Yazılım</string>
-            <string name="android">Android:</string>
+            <string name="android">Android: \u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">Güvenlik Yaması:</string>
-            <string name="build">Derleme:</string>
-            <string name="webview_provider">WebView Sağlayıcısı:</string>
-            <string name="webview_version">WebView Versiyonu:</string>
+            <string name="security_patch">Güvenlik Yaması: \u0020</string>
+            <string name="build">Derleme: \u0020</string>
+            <string name="webview_provider">WebView Sağlayıcısı: \u0020</string>
+            <string name="webview_version">WebView Versiyonu: \u0020</string>
             <string name="orbot">Orbot:</string>
-            <string name="openkeychain">OpenKeychain:</string>
-            <string name="easylist_label">EasyList:</string>
-            <string name="easyprivacy_label">EasyPrivacy:</string>
-            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List:</string>
-            <string name="fanboys_social_label">Fanboy’s Social Blocking List:</string>
-            <string name="ultralist_label">UltraList:</string>
-            <string name="ultraprivacy_label">UltraPrivacy:</string>
+            <string name="openkeychain">OpenKeychain: \u0020</string>
+            <string name="easylist_label">EasyList: \u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy: \u0020</string>
+            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List: \u0020</string>
+            <string name="fanboys_social_label">Fanboy’s Social Blocking List: \u0020</string>
+            <string name="ultralist_label">UltraList: \u0020</string>
+            <string name="ultraprivacy_label">UltraPrivacy: \u0020</string>
         <string name="package_signature">Paket İmzası</string>
-            <string name="issuer_dn">Yayınlayan DN:</string>
-            <string name="subject_dn">Özne DN:</string>
-            <string name="certificate_version">Sertifika Versiyonu:</string>
-            <string name="serial_number">Seri Numarası:</string>
-            <string name="signature_algorithm">İmza Algoritması:</string>
+            <string name="issuer_dn">Yayınlayan DN: \u0020</string>
+            <string name="subject_dn">Özne DN: \u0020</string>
+            <string name="certificate_version">Sertifika Versiyonu: \u0020</string>
+            <string name="serial_number">Seri Numarası: \u0020</string>
+            <string name="signature_algorithm">İmza Algoritması: \u0020</string>
     <string name="permissions">İzinler</string>
     <string name="privacy_policy">Privacy Politikası</string>
     <string name="changelog">Değişiklik Günlüğü</string>
index a2053024aa817ff5b17e7fcc309ba8f8b7a65623..b90de0cff3294815fa827e3aa6ad7dcfebdb6c8c 100644 (file)
@@ -31,7 +31,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  For example, Spanish is `es`.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">zh-rCN</string>
 
-    <!-- MainWebView. -->
+    <!-- MainWebView.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">隐私模式</string>
     <string name="javascript_enabled">开启 JavaScript</string>
     <string name="javascript_disabled">关闭 JavaScript</string>
     <string name="open_navigation_drawer">打开导航栏</string>
     <string name="close_navigation_drawer">关闭导航栏</string>
     <string name="pin_drawer">引脚栏</string>
-    <string name="unrecognized_url">无法识别的链接:</string>
+    <string name="unrecognized_url">无法识别的链接: \u0020</string>
     <string name="add_tab">增加新的窗口</string>
     <string name="close_tab">关闭窗口</string>
     <string name="new_tab">新窗口</string>
     <string name="loading">加载中…</string>
-    <string name="error">错误:</string>
+    <string name="error">错误: \u0020</string>
     <string name="apply">请求</string>
 
     <!-- Loading Blocklists. -->
     <string name="favorite_icon">喜爱的图标</string>
     <string name="url_or_search_terms">输入网址或关键词</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">查看 SSL 证书</string>
     <string name="unencrypted_website">未加密的网站</string>
     <string name="no_ssl_certificate">该网站未加密. 这将允许第三方拦截信息, 攻击你的浏览器并注入恶意的病毒.</string>
     <string name="ssl_certificate">SSL 证书</string>
     <string name="close">关闭</string>
     <string name="domain">域名</string>
-    <string name="domain_label">域名:</string>
-    <string name="ip_addresses">IP 地址:</string>
+    <string name="domain_label">域名: \u0020</string>
+    <string name="ip_addresses">IP 地址: \u0020</string>
     <string name="issued_to">接收者</string>
     <string name="issued_by">发送者</string>
-    <string name="common_name">常用名 (CN):</string>
-    <string name="organization">组织 (O):</string>
-    <string name="organizational_unit">组织单位 (OU):</string>
+    <string name="common_name">常用名 (CN): \u0020</string>
+    <string name="organization">组织 (O): \u0020</string>
+    <string name="organizational_unit">组织单位 (OU): \u0020</string>
     <string name="valid_dates">有效期</string>
-    <string name="start_date">开始时间:</string>
-    <string name="end_date">结束时间:</string>
+    <string name="start_date">开始时间: \u0020</string>
+    <string name="end_date">结束时间: \u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">SSL 证书错误</string>
     <string name="proceed">继续</string>
     <string name="future_certificate">这个证书还未开始</string>
@@ -95,7 +95,7 @@
     <string name="invalid_date">证书日期无效</string>
     <string name="invalid_certificate">证书无效</string>
     <string name="url">链接</string>
-    <string name="url_label">链接:</string>
+    <string name="url_label">链接: \u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">固定不匹配</string>
     <string name="current">当前的</string>
     <string name="pinned">固定</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">HTTP 验证</string>
-    <string name="host">Host:</string>
+    <string name="host">Host: \u0020</string>
     <string name="username">用户名</string>
     <string name="password">密码</string>
 
     <string name="move_to_folder">移动到文件夹</string>
     <string name="move">移动</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">选中:</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">选中: \u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">向上</string>
     <string name="move_down">向下</string>
     <string name="edit">编辑</string>
     <string name="delete">删除</string>
     <string name="select_all">选中所有</string>
-    <string name="bookmarks_deleted">书签已删除:</string>
+    <string name="bookmarks_deleted">书签已删除: \u0020</string>
     <string name="undo">取消</string>
 
     <!-- Bookmarks Database View. -->
     <string name="waiting_for_orbot">等待Orbot链接.</string>
     <string name="custom_proxy_invalid">自定义代理无效.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">关于 Privacy Browser</string>
     <string name="version">版本</string>
         <string name="version_code">版本 %1$s (版本代码 %2$d)</string>
         <string name="hardware">硬件</string>
-            <string name="brand">品牌:</string>
-            <string name="manufacturer">制造商:</string>
-            <string name="model">型号:</string>
-            <string name="device">设备:</string>
-            <string name="bootloader">Bootloader:</string>
-            <string name="radio">Radio:</string>
+            <string name="brand">品牌: \u0020</string>
+            <string name="manufacturer">制造商: \u0020</string>
+            <string name="model">型号: \u0020</string>
+            <string name="device">设备: \u0020</string>
+            <string name="bootloader">Bootloader: \u0020</string>
+            <string name="radio">Radio: \u0020</string>
         <string name="software">软件</string>
-            <string name="android">安卓:</string>
+            <string name="android">安卓: \u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">安全补丁:</string>
-            <string name="build">Build:</string>
-            <string name="kernel">内核:</string>
-            <string name="webview_provider">WebView Provider:</string>
-            <string name="webview_version">WebView Version:</string>
-            <string name="orbot">Orbot:</string>
-            <string name="i2p">I2P:</string>
+            <string name="security_patch">安全补丁: \u0020</string>
+            <string name="build">Build: \u0020</string>
+            <string name="kernel">内核: \u0020</string>
+            <string name="webview_provider">WebView Provider: \u0020</string>
+            <string name="webview_version">WebView Version: \u0020</string>
+            <string name="orbot">Orbot: \u0020</string>
+            <string name="i2p">I2P: \u0020</string>
                 <string name="fdroid_flavor">%1$s (F-Droid flavor)</string>
                 <string name="google_play_flavor">%1$s (Google Play flavor)</string>
-            <string name="openkeychain">OpenKeychain:</string>
+            <string name="openkeychain">OpenKeychain: \u0020</string>
         <string name="memory_usage">内存使用情况</string>
-            <string name="app_consumed_memory">应用程序占用内存:</string>
-            <string name="app_available_memory">应用可用内存:</string>
-            <string name="app_total_memory">应用所有内存:</string>
-            <string name="app_maximum_memory">应用最大内存:</string>
-            <string name="system_consumed_memory">系统占用内存:</string>
-            <string name="system_available_memory">系统可用内存:</string>
-            <string name="system_total_memory">系统所有内存:</string>
+            <string name="app_consumed_memory">应用程序占用内存: \u0020</string>
+            <string name="app_available_memory">应用可用内存: \u0020</string>
+            <string name="app_total_memory">应用所有内存: \u0020</string>
+            <string name="app_maximum_memory">应用最大内存: \u0020</string>
+            <string name="system_consumed_memory">系统占用内存: \u0020</string>
+            <string name="system_available_memory">系统可用内存: \u0020</string>
+            <string name="system_total_memory">系统所有内存: \u0020</string>
             <string name="mebibyte">兆</string>
-            <string name="easylist_label">EasyList:</string>
-            <string name="easyprivacy_label">EasyPrivacy:</string>
-            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List:</string>
-            <string name="fanboys_social_label">Fanboy’s Social Blocking List:</string>
-            <string name="ultralist_label">UltraList:</string>
-            <string name="ultraprivacy_label">UltraPrivacy:</string>
+            <string name="easylist_label">EasyList: \u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy: \u0020</string>
+            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List: \u0020</string>
+            <string name="fanboys_social_label">Fanboy’s Social Blocking List: \u0020</string>
+            <string name="ultralist_label">UltraList: \u0020</string>
+            <string name="ultraprivacy_label">UltraPrivacy: \u0020</string>
         <string name="package_signature">包名</string>
             <string name="issuer_dn">发行人 DN:</string>
             <string name="subject_dn">主题 DN:</string>
index 22a67a337d385b5ff2d16fa735ba3187d410dc0a..822b87880360248c96e81793a85a94c215e98c19 100644 (file)
@@ -33,7 +33,7 @@
     <!-- For translations, `android_asset_path` should be the localization abbreviation.  For example, Spanish is `es`.  This should not be translated unless the Guide and About sections are localized. -->
     <string name="android_asset_path">en</string>
 
-    <!-- MainWebView. -->
+    <!-- MainWebView.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="privacy_mode">Privacy Mode</string>
     <string name="javascript_enabled">JavaScript enabled</string>
     <string name="javascript_disabled">JavaScript disabled</string>
     <string name="open_navigation_drawer">Open navigation drawer</string>
     <string name="close_navigation_drawer">Close navigation drawer</string>
     <string name="pin_drawer">Pin drawer</string>
-    <string name="unrecognized_url">Unrecognized URL:</string>
+    <string name="unrecognized_url">Unrecognized URL: \u0020</string>
     <string name="add_tab">Add tab</string>
     <string name="close_tab">Close tab</string>
     <string name="new_tab">New tab</string>
     <string name="loading">Loading…</string>
-    <string name="error">Error:</string>
+    <string name="error">Error: \u0020</string>
     <string name="apply">Apply</string>
 
     <!-- Loading Blocklists. -->
     <string name="favorite_icon">Favorite Icon</string>
     <string name="url_or_search_terms">URL or Search Terms</string>
 
-    <!-- View SSL Certificate. -->
+    <!-- View SSL Certificate. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="view_ssl_certificate">View SSL Certificate</string>
     <string name="unencrypted_website">Unencrypted Website</string>
     <string name="no_ssl_certificate">Communication with this website is not encrypted. This allows third parties to intercept information, track your browsing, and inject malicious content.</string>
     <string name="ssl_certificate">SSL Certificate</string>
     <string name="close">Close</string>
     <string name="domain">Domain</string>
-    <string name="domain_label">Domain:</string>
-    <string name="ip_addresses">IP Addresses:</string>
+    <string name="domain_label">Domain: \u0020</string>
+    <string name="ip_addresses">IP Addresses: \u0020</string>
     <string name="issued_to">Issued To</string>
     <string name="issued_by">Issued By</string>
-    <string name="common_name">Common Name (CN):</string>
-    <string name="organization">Organization (O):</string>
-    <string name="organizational_unit">Organizational Unit (OU):</string>
+    <string name="common_name">Common Name (CN): \u0020</string>
+    <string name="organization">Organization (O): \u0020</string>
+    <string name="organizational_unit">Organizational Unit (OU): \u0020</string>
     <string name="valid_dates">Valid Dates</string>
-    <string name="start_date">Start Date:</string>
-    <string name="end_date">End Date:</string>
+    <string name="start_date">Start Date: \u0020</string>
+    <string name="end_date">End Date: \u0020</string>
 
-    <!-- SSL Certificate Error. -->
+    <!-- SSL Certificate Error.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="ssl_certificate_error">SSL Certificate Error</string>
     <string name="proceed">Proceed</string>
     <string name="future_certificate">The certificate start date is in the future</string>
@@ -97,7 +97,7 @@
     <string name="invalid_date">The date on the certificate is invalid</string>
     <string name="invalid_certificate">The certificate is invalid</string>
     <string name="url">URL</string>
-    <string name="url_label">URL:</string>
+    <string name="url_label">URL: \u0020</string>
 
     <!-- Pinned Mismatch. -->
     <string name="pinned_mismatch">Pinned Mismatch</string>
     <string name="current">Current</string>
     <string name="pinned">Pinned</string>
 
-    <!-- HTTP Authentication. -->
+    <!-- HTTP Authentication. Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
     <string name="http_authentication">HTTP Authentication</string>
-    <string name="host">Host:</string>
+    <string name="host">Host: \u0020</string>
     <string name="username">Username</string>
     <string name="password">Password</string>
 
     <string name="move_to_folder">Move to Folder</string>
     <string name="move">Move</string>
 
-    <!-- Bookmarks Contextual App Bar. -->
-    <string name="selected">Selected:</string>  <!--This is a plural adjective.-->
+    <!-- Bookmarks Contextual App Bar.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting. -->
+    <string name="selected">Selected: \u0020</string>  <!--This is a plural adjective.-->
     <string name="move_up">Move Up</string>
     <string name="move_down">Move Down</string>
     <string name="edit">Edit</string>
     <string name="delete">Delete</string>
     <string name="select_all">Select All</string>
-    <string name="bookmarks_deleted">Bookmarks Deleted:</string>
+    <string name="bookmarks_deleted">Bookmarks Deleted: \u0020</string>
     <string name="undo">Undo</string>
 
     <!-- Bookmarks Database View. -->
     <string name="waiting_for_orbot">Waiting for Orbot to connect.</string>
     <string name="custom_proxy_invalid">The custom proxy URL is invalid.</string>
 
-    <!-- About Activity.  The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
+    <!-- About Activity.  Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
+        The `%*$*` code inserts variables into the displayed text and should be preserved in translation.  <https://developer.android.com/reference/kotlin/java/util/Formatter> -->
     <string name="about_privacy_browser">About Privacy Browser</string>
     <string name="version">Version</string>
         <string name="version_code">Version %1$s (version code %2$d)</string>
         <string name="hardware">Hardware</string>
-            <string name="brand">Brand:</string>
-            <string name="manufacturer">Manufacturer:</string>
-            <string name="model">Model:</string>
-            <string name="device">Device:</string>
-            <string name="bootloader">Bootloader:</string>
-            <string name="radio">Radio:</string>
+            <string name="brand">Brand: \u0020</string>
+            <string name="manufacturer">Manufacturer: \u0020</string>
+            <string name="model">Model: \u0020</string>
+            <string name="device">Device: \u0020</string>
+            <string name="bootloader">Bootloader: \u0020</string>
+            <string name="radio">Radio: \u0020</string>
         <string name="software">Software</string>
-            <string name="android">Android:</string>
+            <string name="android">Android: \u0020</string>
             <string name="api">%1$s (API %2$d)</string>
-            <string name="security_patch">Security Patch:</string>
-            <string name="build">Build:</string>
-            <string name="kernel">Kernel:</string>
-            <string name="webview_provider">WebView Provider:</string>
-            <string name="webview_version">WebView Version:</string>
-            <string name="orbot">Orbot:</string>
-            <string name="i2p">I2P:</string>
+            <string name="security_patch">Security Patch: \u0020</string>
+            <string name="build">Build: \u0020</string>
+            <string name="kernel">Kernel: \u0020</string>
+            <string name="webview_provider">WebView Provider: \u0020</string>
+            <string name="webview_version">WebView Version: \u0020</string>
+            <string name="orbot">Orbot: \u0020</string>
+            <string name="i2p">I2P: \u0020</string>
                 <string name="fdroid_flavor">%1$s (F-Droid flavor)</string>
                 <string name="google_play_flavor">%1$s (Google Play flavor)</string>
-            <string name="openkeychain">OpenKeychain:</string>
+            <string name="openkeychain">OpenKeychain: \u0020</string>
         <string name="memory_usage">Memory Usage</string>
-            <string name="app_consumed_memory">App Consumed Memory:</string>
-            <string name="app_available_memory">App Available Memory:</string>
-            <string name="app_total_memory">App Total Memory:</string>
-            <string name="app_maximum_memory">App Maximum Memory:</string>
-            <string name="system_consumed_memory">System Consumed Memory:</string>
-            <string name="system_available_memory">System Available Memory:</string>
-            <string name="system_total_memory">System Total Memory:</string>
+            <string name="app_consumed_memory">App Consumed Memory: \u0020</string>
+            <string name="app_available_memory">App Available Memory: \u0020</string>
+            <string name="app_total_memory">App Total Memory: \u0020</string>
+            <string name="app_maximum_memory">App Maximum Memory: \u0020</string>
+            <string name="system_consumed_memory">System Consumed Memory: \u0020</string>
+            <string name="system_available_memory">System Available Memory: \u0020</string>
+            <string name="system_total_memory">System Total Memory: \u0020</string>
             <string name="mebibyte">MiB</string>
-            <string name="easylist_label">EasyList:</string>
-            <string name="easyprivacy_label">EasyPrivacy:</string>
-            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List:</string>
-            <string name="fanboys_social_label">Fanboy’s Social Blocking List:</string>
-            <string name="ultralist_label">UltraList:</string>
-            <string name="ultraprivacy_label">UltraPrivacy:</string>
+            <string name="easylist_label">EasyList: \u0020</string>
+            <string name="easyprivacy_label">EasyPrivacy: \u0020</string>
+            <string name="fanboys_annoyance_label">Fanboy’s Annoyance List: \u0020</string>
+            <string name="fanboys_social_label">Fanboy’s Social Blocking List: \u0020</string>
+            <string name="ultralist_label">UltraList: \u0020</string>
+            <string name="ultraprivacy_label">UltraPrivacy: \u0020</string>
         <string name="package_signature">Package Signature</string>
-            <string name="issuer_dn">Issuer DN:</string>
-            <string name="subject_dn">Subject DN:</string>
-            <string name="certificate_version">Certificate Version:</string>
-            <string name="serial_number">Serial Number:</string>
-            <string name="signature_algorithm">Signature Algorithm:</string>
+            <string name="issuer_dn">Issuer DN: \u0020</string>
+            <string name="subject_dn">Subject DN: \u0020</string>
+            <string name="certificate_version">Certificate Version: \u0020</string>
+            <string name="serial_number">Serial Number: \u0020</string>
+            <string name="signature_algorithm">Signature Algorithm: \u0020</string>
         <string name="version_info_copied">Version info copied.</string>
         <string name="privacy_browser_version_txt">Privacy Browser Version %1$s.txt</string>
         <string name="privacy_browser_version_png">Privacy Browser Version %1$s.png</string>