diff --git a/README.md b/README.md index 46ae54e5..4184b2bd 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ A simple Android app that checks whether your device has root access. Displays d - Device info display (model, marketing name, Android version) - Material 3 theming with dynamic colors - Splash screen with custom exit animation -- Localized in English, German, and Arabic +- Localized in English, German, Arabic, and Russian ## Requirements @@ -37,3 +37,4 @@ A simple Android app that checks whether your device has root access. Displays d ## Todo * Magisk root check +* In-app language picker in the settings screen diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c8b3a5d4..ad4a52ac 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,7 +15,7 @@ android { versionCode = 44 versionName = "v2.0vc$versionCode" @Suppress("UnstableApiUsage") - androidResources.localeFilters += listOf("en", "ar", "de") + androidResources.localeFilters += listOf("en", "ar", "de", "ru") buildConfigField("String", "TELEMETRY_DECK_APP_ID", "\"613251CD-B223-443A-9583-3A18586FAB55\"") } buildTypes { diff --git a/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewLocales.kt b/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewLocales.kt index 4d4a3769..f1e3fc94 100644 --- a/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewLocales.kt +++ b/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewLocales.kt @@ -5,4 +5,5 @@ import androidx.compose.ui.tooling.preview.Preview @Preview(showBackground = true, locale = "en") @Preview(showBackground = true, locale = "de") @Preview(showBackground = true, locale = "ar") +@Preview(showBackground = true, locale = "ru") annotation class PreviewLocales \ No newline at end of file diff --git a/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewPlayStoreListing.kt b/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewPlayStoreListing.kt index bb6d3aa9..faa74dfb 100644 --- a/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewPlayStoreListing.kt +++ b/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewPlayStoreListing.kt @@ -6,12 +6,15 @@ import androidx.compose.ui.tooling.preview.Preview @Preview(name = "Phone - English", group = "Phone", showBackground = true, locale = "en", device = "spec:width=411dp,height=891dp") @Preview(name = "Phone - German", group = "Phone", showBackground = true, locale = "de", device = "spec:width=411dp,height=891dp") @Preview(name = "Phone - Arabic", group = "Phone", showBackground = true, locale = "ar", device = "spec:width=411dp,height=891dp") +@Preview(name = "Phone - Russian", group = "Phone", showBackground = true, locale = "ru", device = "spec:width=411dp,height=891dp") // 7-inch Tablet @Preview(name = "7-inch Tablet - English", group = "7-inch Tablet", showBackground = true, locale = "en", device = "spec:width=600dp,height=960dp,dpi=240") @Preview(name = "7-inch Tablet - German", group = "7-inch Tablet", showBackground = true, locale = "de", device = "spec:width=600dp,height=960dp,dpi=240") @Preview(name = "7-inch Tablet - Arabic", group = "7-inch Tablet", showBackground = true, locale = "ar", device = "spec:width=600dp,height=960dp,dpi=240") +@Preview(name = "7-inch Tablet - Russian", group = "7-inch Tablet", showBackground = true, locale = "ru", device = "spec:width=600dp,height=960dp,dpi=240") // 10-inch Tablet @Preview(name = "10-inch Tablet - English", group = "10-inch Tablet", showBackground = true, locale = "en", device = "spec:width=1280dp,height=800dp,dpi=240") @Preview(name = "10-inch Tablet - German", group = "10-inch Tablet", showBackground = true, locale = "de", device = "spec:width=1280dp,height=800dp,dpi=240") @Preview(name = "10-inch Tablet - Arabic", group = "10-inch Tablet", showBackground = true, locale = "ar", device = "spec:width=1280dp,height=800dp,dpi=240") +@Preview(name = "10-inch Tablet - Russian", group = "10-inch Tablet", showBackground = true, locale = "ru", device = "spec:width=1280dp,height=800dp,dpi=240") annotation class PreviewPlayStoreListing diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml new file mode 100644 index 00000000..14f6b63a --- /dev/null +++ b/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,61 @@ + + + Basic Root Checker + + + НЕ предоставит root-доступ устройству.
Оно лишь показывает, имеется ли root-доступ на устройстве.]]>
+ Нажмите кнопку «#» в правом нижнем углу, чтобы проверить наличие root-доступа + На устройстве есть root-доступ + Не удалось определить наличие root-доступа + На устройстве нет root-доступа + Лицензии + О приложении + Настройки + Политика конфиденциальности + + + Отправлять анонимные данные об использовании + Помогает улучшать приложение через TelemetryDeck. Изменения вступают в силу при следующем запуске приложения. + Открыть политику конфиденциальности в браузере + Android + Ваше устройство + Проверка root-доступа… + + + Copyright 2026 © iboalali\n\n + Это приложение НЕ предоставляет root-доступ.\n + Для работы требуется root-доступ — используйте на свой страх и риск.\n + Приложение не собирает никаких данных и личной информации.\n\n\n + Связаться со мной: + Посетить мой сайт + Это приложение не связано с topjohnwu и libsu и не одобрено ими + + + Проверить root-доступ + Маркетинговое название + Название модели + Версия Android + + + Название устройства + Модель + Версия Android + Скопировано + + + Доступно обновление + Новая версия приложения готова к загрузке. + Обновить + Загрузка обновления… + %1$s / %2$s МБ + Обновление загружено + Установить сейчас + Не удалось загрузить обновление. Повторная попытка будет выполнена автоматически. + Приложение обновлено + + + Другие приложения + Это приложение помогает выводить крупный текст на экран и автоматически подбирает максимально возможный размер шрифта без обрезания текста.\n\nПодходит для совещаний — для голосования по теме числом или словом. + Выберите постоянное уведомление, которое нужно скрыть, и оно будет оставаться скрытым, пока установлено это приложение. + +
diff --git a/app/src/main/res/xml/app_locales_config.xml b/app/src/main/res/xml/app_locales_config.xml index d8db341e..b0acf51b 100644 --- a/app/src/main/res/xml/app_locales_config.xml +++ b/app/src/main/res/xml/app_locales_config.xml @@ -3,4 +3,5 @@ + \ No newline at end of file diff --git a/docs/russian-translation-notes.md b/docs/russian-translation-notes.md new file mode 100644 index 00000000..232d7332 --- /dev/null +++ b/docs/russian-translation-notes.md @@ -0,0 +1,30 @@ +# Russian Translation Notes + +Reference notes documenting the choices made when adding the Russian (`ru`) localization in `app/src/main/res/values-ru/strings.xml`. Useful for future reviewers and for keeping subsequent string additions consistent. + +## Translation choices worth flagging for review + +- **Term: "root-доступ"** (Latin "root" + Cyrillic suffix) is used throughout. This is the standard Russian tech-press convention and matches how the app already presents the term in other locales. The alternative ("права суперпользователя") was rejected as inconsistent and overly literal. + +- **Register: formal / impersonal.** Russian wording uses **"Ваше устройство"**, **"Нажмите"**, **"Выберите"** rather than the informal "ты" form (which the existing German and Arabic translations use). This was an explicit choice for a more professional tone. + +- **Disclaimer phrasing is impersonal** ("Это приложение НЕ предоставит…") rather than addressing the user directly, which reads more professional in Russian than a literal translation of the English source. + +- **`toast_content_copied` → "Скопировано".** This fixes a bug-by-omission in the existing `values-de` and `values-ar` files, where this string was left as the literal English "Content Copied". Russian translates it properly; consider back-porting fixes to the de/ar files. + +- **`app_name` kept as "Basic Root Checker"** (Latin script). Both the German and Arabic files keep it in Latin; it is the marketed product name. + +- **Brand / proper-noun preservation:** "TelemetryDeck", "topjohnwu", "libsu", "Android", "iboalali", and all URLs are kept verbatim. + +- **"МБ"** is the standard Russian abbreviation for megabytes, used in `update_progress_megabytes`. + +- **License texts (Apache 2.0, libsu notice, AndroidDeviceNames notice) were NOT translated** — they remain in English because the source XML marks them `translatable="false"`. This is intentional: legal text must stay verbatim, and translating them would also trigger Lint `ExtraTranslation` errors. + +## Things preserved verbatim from the English source + +These are not translation choices but are worth noting because they are easy to break in subsequent edits: + +- `` wrapper and `` / `
` HTML tags inside `textView_Disclaimer`. +- `%1$s` / `%2$s` positional placeholders in `update_progress_megabytes` (consumed by the in-app update flow — order must not change). +- The `#` glyph reference in `textView_checkForRoot`, which refers to the on-screen FAB symbol. +- Escape sequences: `\n`, `\"`, `\'`, `©`.