From b3d5be23f259bbfef8dad813a9302e77f6fdc19f Mon Sep 17 00:00:00 2001 From: Soren Stoutner Date: Mon, 30 Jul 2018 13:32:06 -0700 Subject: [PATCH] Fix Russian plurals. https://redmine.stoutner.com/issues/291 --- .../main/assets/es/guide_requests_dark.html | 7 ++-- .../main/assets/es/guide_requests_light.html | 7 ++-- .../main/assets/ru/guide_requests_dark.html | 5 ++- .../main/assets/ru/guide_requests_light.html | 5 ++- .../activities/BookmarksActivity.java | 40 +++++++++++++++++-- app/src/main/res/values-de/strings.xml | 6 +++ app/src/main/res/values-es/strings.xml | 6 +++ app/src/main/res/values-it/strings.xml | 6 +++ app/src/main/res/values-ru/strings.xml | 6 +++ app/src/main/res/values/strings.xml | 6 +++ 10 files changed, 80 insertions(+), 14 deletions(-) diff --git a/app/src/main/assets/es/guide_requests_dark.html b/app/src/main/assets/es/guide_requests_dark.html index cdab0599..4f940c61 100644 --- a/app/src/main/assets/es/guide_requests_dark.html +++ b/app/src/main/assets/es/guide_requests_dark.html @@ -34,7 +34,7 @@

-

Navegador Privado incluye cuatro listas de bloqueo basadas en la sintaxis de Adblock: +

Navegador Privado incluye cuatro listas de bloqueo comunes basadas en la sintaxis de Adblock: 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.

@@ -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 stoutner.com.

-

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. +

Navegador Privado tiene 2 listas de bloqueo adicionales, + una llamada Ultra Privacidad 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 www.website.com carga una imagen de images.website.com, esto no se bloquea como petición de una tercera parte porque ambos comparten el mismo dominio base de website.com. 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.

diff --git a/app/src/main/assets/es/guide_requests_light.html b/app/src/main/assets/es/guide_requests_light.html index b162ed18..cbca21f0 100644 --- a/app/src/main/assets/es/guide_requests_light.html +++ b/app/src/main/assets/es/guide_requests_light.html @@ -34,7 +34,7 @@

-

Navegador Privado incluye cuatro listas de bloqueo basadas en la sintaxis de Adblock: +

Navegador Privado incluye cuatro listas de bloqueo comunes basadas en la sintaxis de Adblock: 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.

@@ -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 stoutner.com.

-

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. +

Navegador Privado tiene 2 listas de bloqueo adicionales, + una llamada Ultra Privacidad 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 www.website.com carga una imagen de images.website.com, esto no se bloquea como petición de una tercera parte porque ambos comparten el mismo dominio base de website.com. 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.

diff --git a/app/src/main/assets/ru/guide_requests_dark.html b/app/src/main/assets/ru/guide_requests_dark.html index 09ac13cc..6cb8bc20 100644 --- a/app/src/main/assets/ru/guide_requests_dark.html +++ b/app/src/main/assets/ru/guide_requests_dark.html @@ -32,7 +32,7 @@

-

Privacy Browser включает в себя четыре списка блокировки, основанных на синтаксисе Adblock: +

Privacy Browser включает в себя четыре распространенных списка блокировки, основанных на синтаксисе Adblock: EasyList, EasyPrivacy, Fanboy’s Annoyance List, и Fanboy’s Social Blocking List. Эти списки блокировки обрабатываются Privacy Browser в следующих 22 подсписках, которые проверяют запросы ресурсов в указанном порядке.

@@ -71,7 +71,8 @@ Иногда это может привести к ложным срабатываниям, когда ресурсы разрешаются или блокируются способами, которые не были предназначены для исходной записи. Более подробное описание способа обработки записей списка блокировки доступно на stoutner.com.

-

Privacy Browser имеет пятый список блокировки, блокирующий все сторонние запросы. Запрос считается сторонним, только если базовый домен запроса отличается от базового домена URL-адреса. +

Privacy Browser имеет два дополнительных списка блокировки, один из которых UltraPrivacy, + предназначеный для блокировки трекеров, которые EasyPrivacy разрешает, а другой блокирует все сторонние запросы. Например, если www.website.com загружает изображение с сайта images.website.com, запрос не будет считаться сторонним и не будет заблокирован, так как они оба используют один и тот же базовый домен website.com. Блокировка всех сторонних запросов увеличивает конфиденциальность, но этот список блокировки по умолчанию отключен, поскольку он ломает большое количество веб-сайтов.

diff --git a/app/src/main/assets/ru/guide_requests_light.html b/app/src/main/assets/ru/guide_requests_light.html index 542377b3..56af5356 100644 --- a/app/src/main/assets/ru/guide_requests_light.html +++ b/app/src/main/assets/ru/guide_requests_light.html @@ -32,7 +32,7 @@

-

Privacy Browser включает в себя четыре списка блокировки, основанных на синтаксисе Adblock: +

Privacy Browser включает в себя четыре распространенных списка блокировки, основанных на синтаксисе Adblock: EasyList, EasyPrivacy, Fanboy’s Annoyance List, и Fanboy’s Social Blocking List. Эти списки блокировки обрабатываются Privacy Browser в следующих 22 подсписках, которые проверяют запросы ресурсов в указанном порядке.

@@ -71,7 +71,8 @@ Иногда это может привести к ложным срабатываниям, когда ресурсы разрешаются или блокируются способами, которые не были предназначены для исходной записи. Более подробное описание способа обработки записей списка блокировки доступно на stoutner.com.

-

Privacy Browser имеет пятый список блокировки, блокирующий все сторонние запросы. Запрос считается сторонним, только если базовый домен запроса отличается от базового домена URL-адреса. +

Privacy Browser имеет два дополнительных списка блокировки, один из которых UltraPrivacy, + предназначеный для блокировки трекеров, которые EasyPrivacy разрешает, а другой блокирует все сторонние запросы. Например, если www.website.com загружает изображение с сайта images.website.com, запрос не будет считаться сторонним и не будет заблокирован, так как они оба используют один и тот же базовый домен website.com. Блокировка всех сторонних запросов увеличивает конфиденциальность, но этот список блокировки по умолчанию отключен, поскольку он ломает большое количество веб-сайтов.

diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java index 9f4231ab..c822e0e7 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java @@ -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 . + 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 . + 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. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 655387a4..03ccd1fe 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -202,6 +202,9 @@ 1 Ausgewählt Ausgewählt + выбрана + выбраны + выбрано Nach oben verschieben Nach unten verschieben Bearbeiten @@ -209,6 +212,9 @@ Alle auswählen 1 Lesezeichen gelöscht Lesezeichen gelöscht + закладка удалена + закладки удалены + акладок удалено Rückgängig diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6acb8b38..7620f054 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -206,6 +206,9 @@ 1 seleccionado seleccionados + выбрана + выбраны + выбрано Subir Bajar Editar @@ -213,6 +216,9 @@ Selectionar todo 1 favorito borrado favoritos borrados + закладка удалена + закладки удалены + акладок удалено Deshacer diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 1b7f3b75..6c061ede 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -205,6 +205,9 @@ 1 Selezionato Selezionato + выбрана + выбраны + выбрано Sposta sopra Sposta sotto Modifica @@ -212,6 +215,9 @@ Seleziona tutto 1 Segnalibro eliminato Segnalibri eliminati + закладка удалена + закладки удалены + акладок удалено Annulla diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f92f45a3..1b48b260 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -206,6 +206,9 @@ 1 выбрана выбраны + выбрана + выбраны + выбрано Вверх Вниз Изменить @@ -213,6 +216,9 @@ Выбрать все 1 закладка удалена закладок удалены + закладка удалена + закладки удалены + акладок удалено Вернуть diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a317123a..d2501854 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -207,6 +207,9 @@ 1 Selected Selected + выбрана + выбраны + выбрано Move Up Move Down Edit @@ -214,6 +217,9 @@ Select All 1 Bookmark Deleted Bookmarks Deleted + закладка удалена + закладки удалены + акладок удалено Undo -- 2.45.2