Fix Russian plurals. https://redmine.stoutner.com/issues/291
authorSoren Stoutner <soren@stoutner.com>
Mon, 30 Jul 2018 20:32:06 +0000 (13:32 -0700)
committerSoren Stoutner <soren@stoutner.com>
Mon, 30 Jul 2018 20:32:06 +0000 (13:32 -0700)
app/src/main/assets/es/guide_requests_dark.html
app/src/main/assets/es/guide_requests_light.html
app/src/main/assets/ru/guide_requests_dark.html
app/src/main/assets/ru/guide_requests_light.html
app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-it/strings.xml
app/src/main/res/values-ru/strings.xml
app/src/main/res/values/strings.xml

index cdab05999e24e9cbc08086469c68d015153233a1..4f940c6163c4f380ad01c324c3a9c718f34cc25b 100644 (file)
@@ -34,7 +34,7 @@
 
         <p><img class="center21" src="images/request_details.png"></p>
 
-        <p>Navegador Privado incluye cuatro <a href="https://easylist.to/">listas de bloqueo</a> basadas en la <a href="https://adblockplus.org/filters">sintaxis de Adblock</a>:
+        <p>Navegador Privado incluye cuatro <a href="https://easylist.to/">listas de bloqueo comunes</a> basadas en la <a href="https://adblockplus.org/filters">sintaxis de Adblock</a>:
             EasyList, EasyPrivacy, Lista molesta de Fanboy y Lista de bloqueo social de Fanboy.
             Estas listas de bloqueo son procesadas por Navegador Privado en las siguientes 22 sublistas, que verifican las solicitudes de recursos en el orden listado.</p>
 
@@ -73,8 +73,9 @@
             Esto puede conducir a veces a falsos positivos, en los que los recursos se permiten o bloquean de formas que no estaban previstas en la entrada original.
             Una descripción más detallada de cómo se procesan las entradas de la lista de bloqueo está disponible en <a href="https://www.stoutner.com/privacy-browser/blocklists/">stoutner.com</a>.</p>
 
-        <p>Navegador Privado tiene una quinta lista de bloqueo que bloquea todas las solicitudes de terceras partes.
-            Una solicitud sólo se considera de terceras partes si el dominio base de la solicitud es diferente del dominio base de la URL.
+        <p>Navegador Privado tiene 2 listas de bloqueo adicionales,
+            una llamada <a href="https://www.stoutner.com/privacy-browser/blocklists/ultraprivacy/">Ultra Privacidad</a> que bloquea rastreadores que permite EasyPrivacy,
+            y otra que bloquea todas las solicitudes de terceras partes. Una solicitud sólo se considera de terceras partes si el dominio base de la solicitud es diferente del dominio base de la URL.
             Por ejemplo, si <code>www.website.com</code> carga una imagen de <code>images.website.com</code>,
             esto no se bloquea como petición de una tercera parte porque ambos comparten el mismo dominio base de <code>website.com</code>.
             El bloqueo de todas las solicitudes de terceras partes aumenta la privacidad, pero esta lista de bloqueo está desactivada por defecto porque rompe un gran número de páginas web.</p>
index b162ed18736b127080caa3bf0843bc3eb50ff8ab..cbca21f09d1c0f0b74ab0f4eba54431e9a110c33 100644 (file)
@@ -34,7 +34,7 @@
 
         <p><img class="center21" src="images/request_details.png"></p>
 
-        <p>Navegador Privado incluye cuatro <a href="https://easylist.to/">listas de bloqueo</a> basadas en la <a href="https://adblockplus.org/filters">sintaxis de Adblock</a>:
+        <p>Navegador Privado incluye cuatro <a href="https://easylist.to/">listas de bloqueo comunes</a> basadas en la <a href="https://adblockplus.org/filters">sintaxis de Adblock</a>:
             EasyList, EasyPrivacy, Lista molesta de Fanboy y Lista de bloqueo social de Fanboy.
             Estas listas de bloqueo son procesadas por Navegador Privado en las siguientes 22 sublistas, que verifican las solicitudes de recursos en el orden listado.</p>
 
@@ -73,8 +73,9 @@
             Esto puede conducir a veces a falsos positivos, en los que los recursos se permiten o bloquean de formas que no estaban previstas en la entrada original.
             Una descripción más detallada de cómo se procesan las entradas de la lista de bloqueo está disponible en <a href="https://www.stoutner.com/privacy-browser/blocklists/">stoutner.com</a>.</p>
 
-        <p>Navegador Privado tiene una quinta lista de bloqueo que bloquea todas las solicitudes de terceras partes.
-            Una solicitud sólo se considera de terceras partes si el dominio base de la solicitud es diferente del dominio base de la URL.
+        <p>Navegador Privado tiene 2 listas de bloqueo adicionales,
+            una llamada <a href="https://www.stoutner.com/privacy-browser/blocklists/ultraprivacy/">Ultra Privacidad</a> que bloquea rastreadores que permite EasyPrivacy,
+            y otra que bloquea todas las solicitudes de terceras partes. Una solicitud sólo se considera de terceras partes si el dominio base de la solicitud es diferente del dominio base de la URL.
             Por ejemplo, si <code>www.website.com</code> carga una imagen de <code>images.website.com</code>,
             esto no se bloquea como petición de una tercera parte porque ambos comparten el mismo dominio base de <code>website.com</code>.
             El bloqueo de todas las solicitudes de terceras partes aumenta la privacidad, pero esta lista de bloqueo está desactivada por defecto porque rompe un gran número de páginas web.</p>
index 09ac13cc5319202c7bfc4e9ed10f29bbc0d08012..6cb8bc207f148e42f48eab1884da0a266e700a53 100644 (file)
@@ -32,7 +32,7 @@
 
         <p><img class="center21" src="images/request_details.png"></p>
 
-        <p>Privacy Browser включает в себя четыре <a href="https://easylist.to/">списка блокировки</a>, основанных на <a href="https://adblockplus.org/filters">синтаксисе Adblock</a>:
+        <p>Privacy Browser Ð²ÐºÐ»Ñ\8eÑ\87аеÑ\82 Ð² Ñ\81ебÑ\8f Ñ\87еÑ\82Ñ\8bÑ\80е <a href="https://easylist.to/">Ñ\80аÑ\81пÑ\80оÑ\81Ñ\82Ñ\80аненнÑ\8bÑ\85 Ñ\81пиÑ\81ка Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки</a>, Ð¾Ñ\81нованнÑ\8bÑ\85 Ð½Ð° <a href="https://adblockplus.org/filters">Ñ\81инÑ\82акÑ\81иÑ\81е Adblock</a>:
             EasyList, EasyPrivacy, Fanboy’s Annoyance List, и Fanboy’s Social Blocking List.
             Эти списки блокировки обрабатываются Privacy Browser в следующих 22 подсписках, которые проверяют запросы ресурсов в указанном порядке.</p>
 
@@ -71,7 +71,8 @@
             Иногда это может привести к ложным срабатываниям, когда ресурсы разрешаются или блокируются способами, которые не были предназначены для исходной записи.
             Более подробное описание способа обработки записей списка блокировки доступно на <a href="https://www.stoutner.com/privacy-browser/blocklists/">stoutner.com</a>.</p>
 
-        <p>Privacy Browser имеет пятый список блокировки, блокирующий все сторонние запросы. Запрос считается сторонним, только если базовый домен запроса отличается от базового домена URL-адреса.
+        <p>Privacy Browser имеет два дополнительных списка блокировки, один из которых <a href="https://www.stoutner.com/privacy-browser/blocklists/ultraprivacy/">UltraPrivacy</a>,
+            предназначеный для блокировки трекеров, которые EasyPrivacy разрешает, а другой блокирует все сторонние запросы.
             Например, если <code>www.website.com</code> загружает изображение с сайта <code>images.website.com</code>,
             запрос не будет считаться сторонним и не будет заблокирован, так как они оба используют один и тот же базовый домен <code>website.com</code>.
             Блокировка всех сторонних запросов увеличивает конфиденциальность, но этот список блокировки по умолчанию отключен, поскольку он ломает большое количество веб-сайтов.</p>
index 542377b348bf18913988ed5be49bfd7c78c65358..56af53561fc1ceb3062311793b2b1ac98e43a5c6 100644 (file)
@@ -32,7 +32,7 @@
 
         <p><img class="center21" src="images/request_details.png"></p>
 
-        <p>Privacy Browser включает в себя четыре <a href="https://easylist.to/">списка блокировки</a>, основанных на <a href="https://adblockplus.org/filters">синтаксисе Adblock</a>:
+        <p>Privacy Browser Ð²ÐºÐ»Ñ\8eÑ\87аеÑ\82 Ð² Ñ\81ебÑ\8f Ñ\87еÑ\82Ñ\8bÑ\80е <a href="https://easylist.to/">Ñ\80аÑ\81пÑ\80оÑ\81Ñ\82Ñ\80аненнÑ\8bÑ\85 Ñ\81пиÑ\81ка Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки</a>, Ð¾Ñ\81нованнÑ\8bÑ\85 Ð½Ð° <a href="https://adblockplus.org/filters">Ñ\81инÑ\82акÑ\81иÑ\81е Adblock</a>:
             EasyList, EasyPrivacy, Fanboy’s Annoyance List, и Fanboy’s Social Blocking List.
             Эти списки блокировки обрабатываются Privacy Browser в следующих 22 подсписках, которые проверяют запросы ресурсов в указанном порядке.</p>
 
@@ -71,7 +71,8 @@
             Иногда это может привести к ложным срабатываниям, когда ресурсы разрешаются или блокируются способами, которые не были предназначены для исходной записи.
             Более подробное описание способа обработки записей списка блокировки доступно на <a href="https://www.stoutner.com/privacy-browser/blocklists/">stoutner.com</a>.</p>
 
-        <p>Privacy Browser имеет пятый список блокировки, блокирующий все сторонние запросы. Запрос считается сторонним, только если базовый домен запроса отличается от базового домена URL-адреса.
+        <p>Privacy Browser имеет два дополнительных списка блокировки, один из которых <a href="https://www.stoutner.com/privacy-browser/blocklists/ultraprivacy/">UltraPrivacy</a>,
+            предназначеный для блокировки трекеров, которые EasyPrivacy разрешает, а другой блокирует все сторонние запросы.
             Например, если <code>www.website.com</code> загружает изображение с сайта <code>images.website.com</code>,
             запрос не будет считаться сторонним и не будет заблокирован, так как они оба используют один и тот же базовый домен <code>website.com</code>.
             Блокировка всех сторонних запросов увеличивает конфиденциальность, но этот список блокировки по умолчанию отключен, поскольку он ломает большое количество веб-сайтов.</p>
index 9f4231ab3f4ca810b42c85e00d66d23c4d927982..c822e0e78d1112bf7b94c9dafd786211ac540239 100644 (file)
@@ -270,8 +270,24 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
                     // Update the enabled status of the move icons.
                     updateMoveIcons();
                 } else {  // More than one bookmark is selected.
-                    // List the number of selected bookmarks in the subtitle.
-                    mode.setSubtitle(numberOfSelectedBookmarks + " " + getString(R.string.selected));
+                    // List the number of selected bookmarks according to the language.
+                    if (getString(R.string.android_asset_path).equals("ru")) {  // The Russian translation is used.
+                        // Convert the number of selected bookmarks to a string.
+                        String numberOfSelectedBookmarksString = String.valueOf(numberOfSelectedBookmarks);
+
+                        // Russian follows rule #7 at <https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Localization_and_Plurals>.
+                        if (numberOfSelectedBookmarksString.endsWith("1") && !numberOfSelectedBookmarksString.equals("11")) {  //  Ends in 1.
+                            mode.setSubtitle(numberOfSelectedBookmarks + " " + getString(R.string.selected_russian_ends_in_1));
+                        } else if ((numberOfSelectedBookmarksString.endsWith("2") || numberOfSelectedBookmarksString.endsWith("3") || numberOfSelectedBookmarksString.endsWith("4")) &&
+                                !numberOfSelectedBookmarksString.equals("12") && !numberOfSelectedBookmarksString.equals("13") && !numberOfSelectedBookmarksString.equals("14")) {  // Ends in 2-4.
+                            mode.setSubtitle(numberOfSelectedBookmarks + " " + getString(R.string.selected_russian_ends_in_2));
+                        } else {  // Everything else.
+                            mode.setSubtitle(numberOfSelectedBookmarks + " " + getString(R.string.selected_russian_everything_else));
+                        }
+                    } else {  // Another language is used.
+                        // List the number of selected bookmarks in the subtitle.
+                        mode.setSubtitle(numberOfSelectedBookmarks + " " + getString(R.string.selected));
+                    }
 
                     // Hide non-applicable `MenuItems`.
                     moveBookmarkUpMenuItem.setVisible(false);
@@ -447,11 +463,27 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
                         // Instantiate `snackbarMessage`.
                         String snackbarMessage;
 
-                        // Determine how many items are in the array and prepare an appropriate `Snackbar` message.
+                        // Determine how many items are in the array and prepare an appropriate snackbar message.
                         if (selectedBookmarksIdsLongArray.length == 1) {
                             snackbarMessage = getString(R.string.one_bookmark_deleted);
                         } else {
-                            snackbarMessage = selectedBookmarksIdsLongArray.length + " " + getString(R.string.bookmarks_deleted);
+                            // Prepare a snackbar according to the language.
+                            if (getString(R.string.android_asset_path).equals("ru")) {  // The Russian translation is used.
+                                // Convert the number of selected bookmarks to a string.
+                                String numberOfBookmarksString = String.valueOf(selectedBookmarksIdsLongArray.length);
+
+                                // Russian follows rule #7 at <https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Localization_and_Plurals>.
+                                if (numberOfBookmarksString.endsWith("1") && !numberOfBookmarksString.equals("11")) {  //  Ends in 1.
+                                    snackbarMessage = numberOfBookmarksString + " " + getString(R.string.bookmarks_deleted_russian_ends_in_1);
+                                } else if ((numberOfBookmarksString.endsWith("2") || numberOfBookmarksString.endsWith("3") || numberOfBookmarksString.endsWith("4")) &&
+                                        !numberOfBookmarksString.equals("12") && !numberOfBookmarksString.equals("13") && !numberOfBookmarksString.equals("14")) {  // Ends in 2-4.
+                                    snackbarMessage = numberOfBookmarksString + " " + getString(R.string.bookmarks_deleted_russian_ends_in_2);
+                                } else {  // Everything else.
+                                    snackbarMessage = numberOfBookmarksString + " " + getString(R.string.bookmarks_deleted_russian_everything_else);
+                                }
+                            } else {  // Another language is used.
+                                snackbarMessage = selectedBookmarksIdsLongArray.length + " " + getString(R.string.bookmarks_deleted);
+                            }
                         }
 
                         // Show a SnackBar.
index 655387a44100a4eb1af3d418e273fcb19d9ef462..03ccd1fe836fbc557dc55cc8cbb3994cf4bbb409 100644 (file)
     <!-- Bookmarks Contextual App Bar. -->
     <string name="one_selected">1 Ausgewählt</string>
     <string name="selected">Ausgewählt</string>  <!--This is a plural adjective.-->
+    <string name="selected_russian_ends_in_1">выбрана</string>
+    <string name="selected_russian_ends_in_2">выбраны</string>
+    <string name="selected_russian_everything_else">выбрано</string>
     <string name="move_up">Nach oben verschieben</string>
     <string name="move_down">Nach unten verschieben</string>
     <string name="edit">Bearbeiten</string>
     <string name="select_all">Alle auswählen</string>
     <string name="one_bookmark_deleted">1 Lesezeichen gelöscht</string>
     <string name="bookmarks_deleted">Lesezeichen gelöscht</string>
+    <string name="bookmarks_deleted_russian_ends_in_1">закладка удалена</string>
+    <string name="bookmarks_deleted_russian_ends_in_2">закладки удалены</string>
+    <string name="bookmarks_deleted_russian_everything_else">акладок удалено</string>
     <string name="undo">Rückgängig</string>
 
     <!-- Bookmarks Database View. -->
index 6acb8b389cba64433342d25ccaaad5aebcc39fe6..7620f054dd353787b1a0b05ce94d205fb0177ba1 100644 (file)
     <!-- Bookmarks Contextual App Bar. -->
     <string name="one_selected">1 seleccionado</string>
     <string name="selected">seleccionados</string>  <!--This is a plural adjective.-->
+    <string name="selected_russian_ends_in_1">выбрана</string>
+    <string name="selected_russian_ends_in_2">выбраны</string>
+    <string name="selected_russian_everything_else">выбрано</string>
     <string name="move_up">Subir</string>
     <string name="move_down">Bajar</string>
     <string name="edit">Editar</string>
     <string name="select_all">Selectionar todo</string>
     <string name="one_bookmark_deleted">1 favorito borrado</string>
     <string name="bookmarks_deleted">favoritos borrados</string>
+    <string name="bookmarks_deleted_russian_ends_in_1">закладка удалена</string>
+    <string name="bookmarks_deleted_russian_ends_in_2">закладки удалены</string>
+    <string name="bookmarks_deleted_russian_everything_else">акладок удалено</string>
     <string name="undo">Deshacer</string>
 
     <!-- Bookmarks Database View. -->
index 1b7f3b75d75d28e04a01aac2c98a9389c6dc82aa..6c061eded87c801e038051e3029ed1df546de2bd 100644 (file)
     <!-- Bookmarks Contextual App Bar. -->
     <string name="one_selected">1 Selezionato</string>
     <string name="selected">Selezionato</string>  <!--This is a plural adjective.-->
+    <string name="selected_russian_ends_in_1">выбрана</string>
+    <string name="selected_russian_ends_in_2">выбраны</string>
+    <string name="selected_russian_everything_else">выбрано</string>
     <string name="move_up">Sposta sopra</string>
     <string name="move_down">Sposta sotto</string>
     <string name="edit">Modifica</string>
     <string name="select_all">Seleziona tutto</string>
     <string name="one_bookmark_deleted">1 Segnalibro eliminato</string>
     <string name="bookmarks_deleted">Segnalibri eliminati</string>
+    <string name="bookmarks_deleted_russian_ends_in_1">закладка удалена</string>
+    <string name="bookmarks_deleted_russian_ends_in_2">закладки удалены</string>
+    <string name="bookmarks_deleted_russian_everything_else">акладок удалено</string>
     <string name="undo">Annulla</string>
 
     <!-- Bookmarks Database View. -->
index f92f45a36c7e19489b52f5ac9fb917b6cf0f3a39..1b48b2603154f45351f6e9df1fcfe3a1b2d38e89 100644 (file)
     <!-- Bookmarks Contextual App Bar. -->
     <string name="one_selected">1 выбрана</string>
     <string name="selected">выбраны</string>  <!--This is a plural adjective.-->
+    <string name="selected_russian_ends_in_1">выбрана</string>
+    <string name="selected_russian_ends_in_2">выбраны</string>
+    <string name="selected_russian_everything_else">выбрано</string>
     <string name="move_up">Вверх</string>
     <string name="move_down">Вниз</string>
     <string name="edit">Изменить</string>
     <string name="select_all">Выбрать все</string>
     <string name="one_bookmark_deleted">1 закладка удалена</string>
     <string name="bookmarks_deleted">закладок удалены</string>
+    <string name="bookmarks_deleted_russian_ends_in_1">закладка удалена</string>
+    <string name="bookmarks_deleted_russian_ends_in_2">закладки удалены</string>
+    <string name="bookmarks_deleted_russian_everything_else">акладок удалено</string>
     <string name="undo">Вернуть</string>
 
     <!-- Bookmarks Database View. -->
index a317123ad37c1e671be1d9e43857fc11671fbecd..d2501854b35f9e444b01f30702e70f0b368dd4c9 100644 (file)
     <!-- Bookmarks Contextual App Bar. -->
     <string name="one_selected">1 Selected</string>
     <string name="selected">Selected</string>  <!--This is a plural adjective.-->
+    <string name="selected_russian_ends_in_1">выбрана</string>
+    <string name="selected_russian_ends_in_2">выбраны</string>
+    <string name="selected_russian_everything_else">выбрано</string>
     <string name="move_up">Move Up</string>
     <string name="move_down">Move Down</string>
     <string name="edit">Edit</string>
     <string name="select_all">Select All</string>
     <string name="one_bookmark_deleted">1 Bookmark Deleted</string>
     <string name="bookmarks_deleted">Bookmarks Deleted</string>
+    <string name="bookmarks_deleted_russian_ends_in_1">закладка удалена</string>
+    <string name="bookmarks_deleted_russian_ends_in_2">закладки удалены</string>
+    <string name="bookmarks_deleted_russian_everything_else">акладок удалено</string>
     <string name="undo">Undo</string>
 
     <!-- Bookmarks Database View. -->